while(true)vs EventWaitHandle通知“每秒1000次”处理

时间:2012-03-09 12:29:21

标签: c#

我正在写交易引擎。我收到了来自市场的最新消息。它每秒约有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()
        ....

或者你可能会提出不同的建议......

3 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

您应该调查这两种方式。

我的第一个版本是:

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

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

    ...    
  }

  Thread.Sleap(0);
}

答案 2 :(得分:0)

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

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