.net - 记录器实现中的 CloudQueue.BeginAddMessage

标签 .net performance azure asynchronous azure-storage

我正在考虑使用 CloudQueue.BeginAddMessage 的性能方面用于记录目的的方法。每次调用logger.LogMessage将导致向 Azure 队列发送消息。我知道每次调用BeginAddMessage将发送 POST 请求。等待它完成不是一个选择,因为我的目标是制作 logger.LogMessage方法尽可能快。这就是为什么我计划只触发该操作并忘记(如果请求失败,那并不那么重要)。

打电话CloudQueue.BeginAddMessage有多耗时?

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

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

有更好的选择吗?

最佳答案

我的建议是:在程序中定义一个内存队列,logger.LogMessage() 所做的只是向内存队列添加一条新消息。此外,启动一个专用的后台线程来消耗内存队列并将日志消息上传到Azure队列。您甚至可以为这个专用线程设置一个信号量,以您可以控制的并发度上传日志消息。

关于.net - 记录器实现中的 CloudQueue.BeginAddMessage,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40681158/

相关文章:

C# - SSH Winforms 模拟控制台

performance - 使用后效性能下降的 activerecord 预加载

azure - Azure 上的打包/发布错误

asp.net - .net SqlCommandTimeOut 和连接池

c# - IronPython 调用 TryGetMember 而不是 TryInvokeMember

.net - HttpContext.Current.Session 空项目

c# - 本地字符串变量的实例化会影响性能吗?

python - 为什么 python dict 更新出奇地慢?

azure - 如何使用react和node js(服务器端)将更大的文件(200mb+)上传到blob存储?无需在服务器上保存文件

node.js - 配置Azure以在开发环境中运行nodejs应用程序