我有一个简单的控制台应用程序,它使用 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/