2013-12-17 9 views
7

最近LinqとPlinqについていくつかの対策を行いました。 私は、どのような状況でPlinqの大きな利点があるのか​​分かりません。PLINQの本当のメリットはありますか?

は私のような多くの例を見つけた:

Enumerable.Range(0, 10000).AsParallel().ForAll(_ => Thread.Sleep(50000)); 

それは10000の程度とparallizedすることができ、はい、その後10000倍高速になりますので、これは、全く役に立たない例であるが、それはビジネスで珍しいですアプリケーションを10000回ループして「IOジョブ」を作成します。

誰かが例を挙げることができる場合は、投稿してください。

PlinqはLinq to ObjectsとLinq to XMLでのみ利用可能です。 Webサーバー上で動作するアプリケーションでは使用しないでください(独自のスレッド管理があります)。 私たちのチャンスは、複数のコアを持つデスクトップアプリケーションに還元されます。

通常は、1秒に1回ずつ連続して実行されるlinqクエリを記述します。私はそれをparallizeして、それは本当に平行して実行されますが、より速くなりますが、誰が気に? まだ十分速いと思います。エンドユーザーは違いは見られません。

誰かがDBからすべてのデータを取得し、メモリ内でクエリを実行しているときの例を想像することができます。それから、役に立つかもしれませんが、それは間違ったデザインです。

TPLはasyncronプログラミングにとっては良いことですが、Plinqは便利なツールです。

誰もそれについて肯定的な経験をしていますか?あなたはPLINQから利益を得るている

+0

*「パラレルが常に高速になるとは思わない」* ... [PLINQで潜在的な落とし穴](http://msdn.microsoft.com/en-us/library/dd997403%28v= vs.110%29.aspx)!! –

+0

ありがとう、私はすでに見てきました:) – speti43

+0

壊れていないものを修正する必要はありません。 PLINQは、マルチコアコンピュータ上の大規模なデータに対して意味をなさけることができます。 –

答えて

7

キーシナリオは次のようなものです:

int[] src = Enumerable.Range(0, 100).ToArray(); 
var query = src.AsParallel() 
       .Select(x => ExpensiveFunc(x)); 

そして、あなたが本当の利益を得ますか。

便利な場合の詳細については、hereの記事を参照してください。

私はグラフ作成のためにX点のセットから一連のY値を計算するために、高価な反復数値法を評価しようとしているときなど、利点を見ました。それを書くのは、高速かつ維持するために簡単にすることができますよう

+0

このようなコードを書いたことがありますか?私はPLINQの利点を理論的に理解していますが、ExpensiveFuncの実装を想像することはできませんが、私はまだこれが間違った設計だと考えています。はるかに速く並行してExpensiveFuncの内部にあるべきものは何ですか? – speti43

+3

はい、あります。私は24コアのマシンを使用していましたが、1000データポイントを計算しようとしていました。各データポイントは、個別に計算するために約200 msの数値スラッシングが必要です。処理時間は約3分から15秒にまで短縮され、私のCPUはほとんどのコアでうまく機能しました。 PLINQは魔法の解決策ではありませんが、本当のメリットをもたらす状況があります。 (私の場合、ExpensiveFunc内のコードは、反復行列乗算を行い、半導体デバイスシミュレーションの離散点電圧を計算していました) – Baldrick

+0

そうです。ありがとう! – speti43

0

はで(私は、データウェアハウスのETLの数のPLINQを使用したデータの非常に大きなpeice以上の複雑なタスク

_objects.AsParallel().Select(ConvertObject); 

bool ConvertObject(object item) 
{ 
//some long running task 
} 

上でそれをやってみてください全体的なパフォーマンスのおそらくコスト)

私はここでのビジネスケースは開発のスピードだとします。

関連する問題