c# - ZeroMQ Poll 函数是否在 .NET 上使用了过多的 CPU?

标签 c# zeromq

我有一个简单的控制台应用程序,它使用 ZeroMQ 来发送和接收消息。在接收部分,我有以下消息泵代码:

   ZMQ.Context _context = new ZMQ.Context(1);

   ZMQ.PollItem[] pollItems = new ZMQ.PollItem[0];

   while (!_finished)
   {
       if (pollItems.Length > 0)
           context.Poll(pollItems, pollTimeout);
       else
           Thread.Sleep(1);

       if (_receiversChanged)
           UpdatePollItems(ref pollItems);
   }

(我的想法是我可以在运行时从轮询器中添加和删除项目,因为我需要添加接收者。只要接收者集发生变化,UpdatePollItems 就会简单地创建一个新数组。)

我已尝试将 pollTimeout 值设置为 50 毫秒和 500 毫秒,但应用程序(位于 Console.ReadKey 上的主线程上)仍然使用 100% 的一个核心,即使没有发送任何消息也是如此。我在分析器下运行该应用程序并确认是 ZMQ.Context.Poller 占用了所有 CPU。

其他人有没有看到类似的行为?我正在使用最新的 ZeroMQ C# 绑定(bind)(来自 NuGet 的 clrzmq-x64.2.2.3)。

最佳答案

是的,驱动程序中存在错误。我也是这么打的查看代码,.net 4 版本可能会更好,但您必须重新编译它。我将检查我重写的代码是否可以作为拉取请求重新集成。

关于c# - ZeroMQ Poll 函数是否在 .NET 上使用了过多的 CPU?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10028485/

相关文章:

c# - 如何在Unity3d中截取透明背景的屏幕截图?

c# - 注册来自不同类的回调

c# - 在 VB.NET 中声明一个十六进制常量

node.js 回调被多次调用

zeromq - 无丢失关闭ZeroMQ接收端

python - 如何检查 Docker 中是否安装了 python 包?

c# - 保存文件时出现 UnauthorizedAccessException

javascript - 将 C# View 模型转换为 JavaScript 模型时转义 HTML 标签

c - 简单的有线协议(protocol),一个人要做什么?

c#-4.0 - 发布者和订阅者中的 NetMQ 不工作