私はfor-loopで一連のhttp-sitesに接続するASP MVCコントローラを持っています。同様に:ASP.NET C#Parallel.ForEachパフォーマンスゲイン
foreach(string provider in providers){
// get data from asomehttp URL
}
これは実行するのに約4秒かかり...
私が試してみた:
Parallel.ForEach(providers, (provider) => {
// get data from some http URL
});
を、私は全くのパフォーマンスゲインを見ません!
これはなぜですか?
ループ内のコードにも依存する可能性があります。 –
おそらくボトルネックは検索ではなく、ポスト処理であるか、または単一のコアしかなく、コンテキスト切り替えのコストが重要ですあらゆる利益。さて、IOバインドされた作業は、非同期、待機中、およびTask.WhenAllと並列化する必要があります。特に競合するWebアプリケーションで。 – StuartLC
それぞれのコード行にどのようなパフォーマンスが見られますか? 1つのサイトが時間の90%を取っている可能性がありますので、ほとんど違いはありません。各サイトの所要時間を確認できるようにタイマーログを追加することもできますが、それらを同時に実行する利点があります。 – Theo