0

シナリオは次のとおりです。渡されたパラメーターに応じて、db からデータを取得し、さまざまなチェックを行い、必要なデータを提供するメソッドを持つ dll があります。

GetGOS_ForBill(AgencyCode)

Windows アプリケーションでは、500 以上の機関を一覧表示するリストボックスがあります。各機関の GOS を取得して、ジェネリック リストに追加します。ユーザーがすべての代理店 (現時点では 500 以上) を選択した場合、約 10 分かかります。dll からデータを返します。

バックグラウンド処理について考えてみました。ただし、ユーザーが画面上で他のことを行う以外に、それによって時間が短縮されることはありません。マルチスレッドを検討しています。

誰でもこれで私を助けることができますか? どのようなアプローチが適切で、マルチスレッドでどのように達成できるのでしょうか?

4

1 に答える 1

4

ところで、あなたはマルチスレッディングの経験があまりないと思います。マルチスレッディングは、即席で Stackoverflow の質問を介して捨てるだけのトピックではありません。何をしているのかわからない場合は、マルチスレッドを使用しないことを強くお勧めします... 1 つの問題ではなく、2 つの問題が発生します。

あなたの場合、パフォーマンスの問題は、スレッドを使用して並列ワークロードを取得することとは関係ありませんが、問題を正しく構造化することとは関係ありません。

現在、各エージェンシーに個別にクエリを実行しています。これは、いくつかのエージェンシーでは正常に機能していますが、急速に低下しています。クエリ自体はおそらく高速です。問題は、そのクエリを 500 回実行していることです。その代わりに、単一のクエリですべての機関のすべての GOS を取得し (おそらく高速になるでしょう)、それをメモリに格納してみてください (辞書など)。次に、必要に応じて適切な GOS のセットを取得します。

最も一般的なケースがユーザーがそれらのいくつかを選択するだけの場合は、いつでもしきい値を確立できます...選択した数がたとえば30未満の場合は各クエリを実行し、そうでない場合は一般的なクエリを実行してメモリから取得します。

于 2013-01-18T15:33:04.413 に答える