2012-03-09 7 views
1

私は取引エンジンを書いています。私は市場のveeeeeryyyの更新情報を受け取る。毎秒〜1000回の更新があり、それらをキューに入れます。どのように私はメッセージを処理する必要がありますaccoutに取り掛かる質問は - それはEventWaitHandleを使用することが妥当か、またはwhile(true)ループを使用する方が良いですか?私はあなたのコードを変更するには、性能/リソースには何も得られないだろうと思いますので、while(true)と "1000回/秒"処理のEventWaitHandle通知

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() 
     .... 

それとも、おそらくあなたは別の何かを提案することができます...

+0

どのオブジェクトが 'queue'ですか? – ken2k

+0

ほとんどの場合;)1秒間に何万回も処理します(5つの強制交換)。あなたはその時間に敏感ですか?私はそうではありません - 私は高い周波数ではなく、ミリ秒単位で上向きに取引します。 – TomTom

+0

C#プログラマーにとって面白いユーザー名です。 –

答えて

0

これらの方法の両方を調査する必要があります。

私の最初のバージョンは次のとおりです。

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

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

    ...  
    } 

    Thread.Sleap(0); 
} 
0

WaitOne()は、第1の使用スピンロックに十分にスマートです。たぶん唯一できることは、ifwhileに置き換えることです。キューに入れられたすべてのリクエストを1回の「サイクル」で処理できるからです。

+0

スピンロックはManualResetEventSlimによってのみ利用されます –

+0

あなたは正しいです...ああ年齢... –

0

あなたはelse節でWaitOne()を置くことができます。

if (queue.Count > 0) 
    queue.Dequeue(); 
else 
    queue.wh.WaitOne(); 
関連する問題