C# while(true)vs EventWaitHandle通知在";每秒1000次”;处理

C# while(true)vs EventWaitHandle通知在";每秒1000次”;处理,c#,C#,我在写交易引擎。我收到来自market Veeeeryyyy的更新。每秒大约有1000次更新,我把它们放在队列中。考虑到我应该如何处理消息,问题是-使用EventWaitHandle合理还是使用while(true)循环更好 while (true) { queue.wh.WaitOne(); // do I need that to be executed 1000 times per second or just skip it? if (queue.Count > 0

我在写交易引擎。我收到来自market Veeeeryyyy的更新。每秒大约有1000次更新,我把它们放在队列中。考虑到我应该如何处理消息,问题是-使用EventWaitHandle合理还是使用
while(true)
循环更好

while (true)
{
    queue.wh.WaitOne(); // do I need that to be executed 1000 times per second or just skip it?
    if (queue.Count > 0)
        queue.Dequeue()
        ....

或者你可能会提出一些不同的建议…

WaitOne()
足够聪明,可以先使用自旋锁,所以我认为你不会从性能/资源上获得任何东西来更改代码。也许您可以做的唯一一件事就是将
if
替换为
while
,这样您可以在一个“周期”内处理所有排队的请求。

您应该研究这两种方法

我的第一个版本是:

while(true)
{
  while(queue.Count > 0)
  {
    var md;

    lock(queue)
    {
      md = queue.Dequeue();
    }

    ...    
  }

  Thread.Sleap(0);
}

您可以将
WaitOne()
放在else子句中

if (queue.Count > 0)
    queue.Dequeue();
else
    queue.wh.WaitOne();

几乎不经常;)我每秒处理数万次(5次压缩交换)。你对时间很敏感吗?我不是-我向上换毫秒,频率不高。一个C#程序员的用户名很有趣。Jonas事实上我用Java已经7年了,但现在我不得不用C#,因为它更能满足我的需要:)
队列实际上是我写的,但我认为这在这个问题的范围内并不重要。您的队列对象是并发访问的吗?一个BlockingQueue实现。旋转锁仅由ManualResetEventSlim使用