リストを作成するためにネストされた foreach を実行する必要があるシナリオがあります。私が行うことの擬似コードは以下のとおりです
foreach(var x in list) (ForEach1)
get m // List<string>
foreach(var k in m) (ForEach2)
get t // List<string>
foreach(var o in t) (ForEach3)
// Do some work. and add output to a list
// which is defined before first for each
ただし、Foreach2 と Foreach3 で (Perforce コマンドを実行して Perforce から) 外部システムからデータを取得するため、このコードの実行速度は非常に遅く、速度を上げる必要があります。
Parallel.ForEach を使用して、ForEach1 または ForEach2 を並列で実行しようとしました。私のテストでは、パフォーマンスが大幅に向上しましたが、不正確な結果が得られました。
- このコードを foreach ステートメントで実行すると、生成されるリストには 625 個の項目があります (これは正しいです)。
- ForEach1 に Parallel.ForEach を使用すると、リストに 325 が追加されますが、これは予想よりもかなり下です。
- 最後に、ForEach2 に Parallel.ForEach を使用すると、リストに 605 個の項目が追加されますが、まだ 20 個が不足しています。
何が間違っているのか、何が欠けているのかわかりません。Parallel foreach または for を使用する際に考慮すべきことは何ですか?
誰かが私を整理するのを手伝ってくれますか? パフォーマンスを改善するための他の提案をいただければ幸いです
ありがとう