记录器实现中的CloudQueue.BeginAddMessage

时间:2016-11-18 15:49:46

标签: .net performance azure asynchronous azure-storage

我正在考虑使用CloudQueue.BeginAddMessage方法进行日志记录的性能方面。每次调用logger.LogMessage都会导致向Azure队列发送消息。我知道每次调用BeginAddMessage都会发送一个POST请求。等待它完成不是一种选择,因为我的目标是尽可能快地制作logger.LogMessage方法。这就是为什么我打算只启动操作并忘记(如果请求失败,它不是那么关键)。

调用CloudQueue.BeginAddMessage是多么费时?

它是否在returninig之前执行HTTP请求初始化(如构建HTTP正文,打开连接等)?

如果是,那么我必须将此初始化移动到其他线程,方法是将其包装在异步调用中,如Task.Run(() => CloudQueue.BeginAddMessage())

有更好的选择吗?

1 个答案:

答案 0 :(得分:2)

这是我的建议:在程序中定义一个内存队列,logger.LogMessage()所做的只是向内存队列添加一条新消息。此外,启动专用后台线程以使用内存队列并将日志消息上载到Azure队列。你甚至可以为这个专用线程提供一个Semaphore来以并发方式上传日志消息,这可以由你控制。