4

ネストされたPLINQクエリの実行に問題はありますか?

例えば:

//Contains roughly 7000+ elements
mycollections.AsParallel().ForAll(x => { 

  //contains 12 elements
  anothercollection.AsParallel().ForAll(y => { 
     //download some data from the web and parse it
  });
});
4

1 に答える 1

6

ネストされたクエリの使用に基本的な問題はないので、確実にそれを行うことができ、PLINQはコードを可能な限り効率的に並列化するために最善を尽くします。ただし、それは考慮すべきことかもしれません。可能な限り最高のパフォーマンスを得たい場合は、必ずいくつかの測定を実行する必要があります。

最適なオプションは、両方のコレクションの要素数と処理の実行に必要な時間によって異なります。

  • 外側のコレクションが十分に小さい場合は、内側のループも必要になります。これにより、並列化の可能性が十分に高まります(PLINQに十分なタスクを生成して、実行のバランスをとることができます)。

  • 外側のコレクションに多数の要素が含まれている場合、単一の外側のループでPLINQに並列化に十分なスペースを与えることができるため、内側のループはおそらく不要です。実際、内側のループはオーバーヘッドを追加するだけかもしれません(ただし、私の経験から、これは非常に多数の要素でのみ発生します)

また、単一のループのみを並列化する場合は、外側のループにする必要があります。このようにして、すべての作業を一度に分割でき、並列化のオーバーヘッドが1回だけ発生します。

于 2010-10-03T23:04:48.110 に答える