我正在考虑使用CloudQueue.BeginAddMessage
方法进行日志记录的性能方面。每次调用logger.LogMessage
都会导致向Azure队列发送消息。我知道每次调用BeginAddMessage
都会发送一个POST请求。等待它完成不是一种选择,因为我的目标是尽可能快地制作logger.LogMessage
方法。这就是为什么我打算只启动操作并忘记(如果请求失败,它不是那么关键)。
调用CloudQueue.BeginAddMessage
是多么费时?
它是否在returninig之前执行HTTP请求初始化(如构建HTTP正文,打开连接等)?
如果是,那么我必须将此初始化移动到其他线程,方法是将其包装在异步调用中,如Task.Run(() => CloudQueue.BeginAddMessage())
。
有更好的选择吗?
答案 0 :(得分:2)
这是我的建议:在程序中定义一个内存队列,logger.LogMessage()所做的只是向内存队列添加一条新消息。此外,启动专用后台线程以使用内存队列并将日志消息上载到Azure队列。你甚至可以为这个专用线程提供一个Semaphore来以并发方式上传日志消息,这可以由你控制。