2011-06-23 7 views
0

証券取引所の証券取引のアプリケーションがあります。これは、ベンダーの1社からリアルタイムのマーケットフィードを提供しています。我々はワーカースレッドに関する市場データを処理しており、メインGUIを更新している間、このデータをGUIスレッドにマーシャリングしています。重い更新中に80列のグリッドを更新中にGUIが応答しません

80個の列を持つ超グリッド(第三者のグリッドビュー)があります。マーケットデータに変動があった場合と更新する必要があるセキュリティが同じ約40行あります。我々は、10メッセージ/秒/セキュリティの市場頻度を処理することができます。しかし、それを超えて私たちは対処できません。頻度が25〜30ms /秒/セキュリティに増加すると、GUIは応答しなくなります。私たちは設計と実装中にベストプラクティスに従ってきましたが、まだ高い周波数を扱うことはできません。私たちはワーカー/バックグラウンドスレッドでGUI以外のすべての作業を実行していますが、GUIハングに直面しています。この問題に取り組むために、すぐに使える解決策を提案してください。ここでは、セキュリティの理由からコードスニペットを記述することはできません。

+0

これは明らかにブローカによって引き起こされ、メッセージを十分に速く読み取っていません。あなたは彼らがより良い仕事をする必要があると伝える必要があります。 –

+0

Soo ...それは80列、40行、25-30更新*行ごと*毎秒ですか?そうですか?そうであれば、Hansが示唆しているように、これを取って行動することができる何らかのスーパーブローカーを持たない限り、ほとんどの更新は冗長です!各行の更新を人間が読めるように制限し、他のすべてをダンプします。 –

答えて

0

グリッドコンポーネントをバッファとマルチスレッドを2倍にできるものに切り替えます(ほとんどのデータは更新の回りに静的なままであることが予想されます)。あなた自身のサウンドを避けられないようにローリングする:このような重い更新アクティビティは、グリッドコントロールの最も一般的な使用例ではありません。私はあなたが変更できるオープンソースコードでグリッドコントロールを探し始めます。 http://www.codeproject.comまたはhttp://www.codeplex.com。何を選ぶかは、あなたの他の要件に依存します。

0

ここで重要なことは、すべてを仮想化することです。データモデルとグリッドの間の唯一のやり取りは、関連するセルをペイントする必要があるときです。これを行うには、この種の仮想化をサポートするグリッドを使用する必要があります(これを行うにはSyncfusionグリッドを使用しました。例:hereを参照)。

また、GUIスレッドをあまり頻繁にブロックしないように、データモデルに更新をバッチすることもできます。 this question and answerをご覧ください。

関連する問題