1

.net フレームワーク 4.0 を使用して Windows フォームで株式市場アプリケーションを開発しています。取引所からティックをリアルタイムで取得しています。ティックをリアルタイムで受け取ることができます。私のシナリオでは、リアルタイム フィードをジェネリック コレクションに書き込むスレッドを作成する必要があります。他の継続的に実行されているバックグラウンド スレッドは、コレクションからそれを取得し、さらに処理を行います。これを実現するために、 ConcurrentDictionaryConcurrentQueueの組み合わせを使用しています。キー conatins シンボル名と値には ConcurrentQueue が含まれます。これが実装された方法です最初の回答を確認してください

これは問題なく機能しています。私の唯一の懸念は遅延です。株価はリアルタイムで変動する必要があるため、このプロセスは 1 秒の遅延を引き起こしています。このシナリオは他のロジックで実装できますか、または遅延を回避するために ConcurrentDictionary または ConcurrentQueue のパフォーマンスを改善できますか?

4

2 に答える 2

1

stmbol-id と対応する Page を含むオブジェクトをキューに入れ、(各シンボル ID に専用のスレッドを割り当てずに) ワーカー スレッドによってそれをキューから取り出すと、ワーカー スレッドは適切な処理に応じてページを送信します。単純な switch case ステートメントを使用して、シンボル ID に対して。

このように、シンボルのキューが存在するかどうかを確認する必要はありません。タイプのスレッドセーフなキューが 1 つだけあり、処理に ThreadPool を使用できます。

ワーカー スレッドはこれを行います。

IdPagePair pair = market.Dequeue();

if (pair.Id == 1) { Process1(pair.Page); }

else 

if (pair.Id == 2) { Process2(pair.Page); }

// etc...
于 2013-05-22T17:30:02.453 に答える