私はオブジェクトのそれぞれを並列に処理したいという巨大なコレクションを持っています。同期を同じに行うには、通常、単純な「foreach」が必要です。Parallel.ForEachとAsParallel()。ForAll
私のシナリオでは、Parallel.ForEachまたはMyCollection.AsParallel()、ForAll()のいずれかを使用してください。
あなたは、もう一方を使うことのメリットを私に見せてもらえますか?
私はオブジェクトのそれぞれを並列に処理したいという巨大なコレクションを持っています。同期を同じに行うには、通常、単純な「foreach」が必要です。Parallel.ForEachとAsParallel()。ForAll
私のシナリオでは、Parallel.ForEachまたはMyCollection.AsParallel()、ForAll()のいずれかを使用してください。
あなたは、もう一方を使うことのメリットを私に見せてもらえますか?
私が見ているのは、foreach
を並列化するだけであれば、その並列バージョンはParallel.ForEach()
です。
ParallelEnumerable.ForAll()
は、LINQクエリの後にforeach
が続き、両方を並列化したい場合に使用します。ですから、AsParallel()
を追加してLINQクエリを並列化し、次にForAll()
に変更してforeach
を並列化するとします。
両方とも時間をとり、勝者を選んでください。
私はParallel.ForEachが最も快適な並列シナリオでより良いパフォーマンスを発揮することを発見しました。より高度なワークバランシングモデルを使用しているようです。 PLINQは主にクエリの並列化を目的としています。
AsParallel()、AsOrdered()で要素を並べ替えることができます。 Parallel.ForEachの注文はすぐにはできません。
私の2セント:
ForAll
を使用すると、WithDegreeOfParallelism
拡張メソッドを使用して並列処理の所望のレベルを指定することができます。
ForEach
では、最大レベルを制限することができます。
基本的には、ForAll
にもっと多くのスレッドを使用させることができます。
これは関連しているようです。 http://stackoverflow.com/questions/2270097/does-parallel-foreach-require-asparallel?rq=1 – Patrick
[.AsParallel()。ForAllまたはParallel.ForEachパフォーマンスの問題を使用してタスクを並列化する](http: //stackoverflow.com/questions/8415998/parallelizing-a-task-using-asparallel-forall-or-parallel-foreach-performance) – Patrick