複数の SQL ステートメントを SQL Server から DataTables にロードする必要があります。ほとんどのステートメントは、約 10.000 から 100.000 のレコードを返し、それぞれの読み込みに数秒かかります。私の推測では、これは単純に、移動する必要があるデータの量によるものです。ステートメント自体の処理にそれほど時間はかかりません。
そのため、Parallel.For() を使用してデータを並列にロードしようとしましたが、全体の処理時間が短縮されることを期待しています。パフォーマンスが 10% 向上しますが、それだけでは十分ではありません。理由としては、私のマシンがデュアル コアのみであるため、ここでの利点が制限されている可能性があります。ただし、プログラムがデプロイされるサーバーには 16 個のコアがあります。
私の質問は、どうすればパフォーマンスをさらに向上させることができるでしょうか? 非同期データ サービス クエリの使用は、PLINQ よりも優れたソリューション (BeginExecute など) でしょうか? それとも他のアプローチですか?
SQL Server は同じマシンで実行されています。これは、展開サーバーでも同様です。
編集: DataTable の代わりに DataReader を使用していくつかのテストを実行しました。これにより、読み込み時間が約 50% 短縮されました。すごい!それでも、マルチプロセッサ マシンを使用する場合、BeginExecute による並列処理によって全体の読み込み時間が改善されるかどうかは疑問です。誰もこれを経験していますか?これについて助けてくれてありがとう!
更新: 読み込み時間の約半分が SQL ステートメントの処理に費やされていることがわかりました。SQL Server Management Studio では、ステートメントにかかった時間はごくわずかでしたが、ADO.NET では、どういうわけか、はるかに長い時間がかかりました。したがって、DataTable をロードする代わりに DataReaders を使用し、SQL ステートメントを調整することで、初期ロード時間の約 25% まで短縮できました。Parallel.For() を使用して並列スレッドで DataReaders をロードしても、ここでは改善されません。だから今のところ、私は結果に満足しており、そのままにしておきます. おそらく、.NET 4.5 に更新するときに、非同期 DataReader の読み込みを試してみます。