私は plinq を使用して linq での並列プログラミングの利点を利用しようとしていますが、すべての CPU コアをより効率的に使用するという事実を除けば、その使用を完全に理解しているかどうかはわかりません。したがって、大規模なクエリの場合はより高速になる可能性があります。 . linq 呼び出しで AsParallel() を呼び出して eplinq 機能を利用するだけで、常に高速になりますか? それとも、クエリまたは処理するデータが大量にある場合にのみ使用する必要がありますか?
2 に答える
並列実行が常に高速であると仮定することはできません。場合によります。状況によっては、並列処理を行うことで、マルチコア プロセッサで多くのことを得ることができます。それ以外の場合は、単純なループよりも並列ループの方がわずかにオーバーヒートするため、単純に速度を落とすだけです。
たとえば、組み込みの並列ループが災害になる可能性がある理由を説明している他の回答を参照してください。
ここで、正確なコンテキストで並列ループを使用することが良い考えであるかどうかを知る最善の方法は、並列実装と非並列実装の両方をテストし、それらにかかる時間を測定することです。
答えをさらに追加するには、データにも依存します。少し「古い学校」に行くと、 foreach の代わりに for などを使用して、ループ展開の道をたどることができます。
ただし、マイクロ最適化を行っていないことを確認する必要があります。データのフェッチとデータのサイズ (確かにページ化されたデータの場合) によっては、おそらくそれを使用しなくても済むでしょう。
linq をマルチコアに対応させることがクールでないと言っているわけではありません。ただし、そのようなことを行うにはセットアップ コストがかかることに注意してください。そのため、そのコードの保守とデバッグの複雑さと利点を比較検討することができます。
アルゴリズムがすでに一流である場合は、plinq 拡張機能を調べてください。map reduce メカニズムなどを使用することをお勧めします。ただし、最初にアルゴリズムと全体的な利点を確認してください。適切な種類のコレクション (など) を適切な方法で操作することは、常に独自の利点 (および問題!) をもたらします。
何を解決しようとしていますか?