我有一个简单的控制台应用程序,它使用 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 只需在接收器集更改时创建一个新数组。)
我尝试了 50ms 和 500ms 的 pollTimeout 值,但应用程序(位于 Console.ReadKey 上的主线程上)仍然使用 100% 的一个内核,即使没有发送消息。我在分析器下运行该应用程序并确认它是 ZMQ.Context.Poller 正在咀嚼所有 CPU。
其他人是否看到过类似的行为?我正在使用最新的 ZeroMQ C# 绑定(来自 NuGet 的 clrzmq-x64.2.2.3)。