私は新しいTPL(Task Parallel Library)がParallel.ForEach()を実装しており、「表現された並列性」で動作することを理解します。つまり、デリゲートが複数のスレッドで実行されることを保証するのではなく、ホストプラットフォームに複数のコアがあるかどうかを確認し、真の場合はコア全体に作業を分散させます(基本的にコアごとに1スレッド) 。.NET 4 ... Parallel.ForEach()question
ホストシステムに複数のコアがない場合(そのようなコンピュータを見つけるのが難しくなると)、通常のforeachループのようにコードが順番に実行されます。かなりクールなもの、率直に言って。
通常、私はThreadPoolのからバックグラウンドスレッドで私の長時間実行される操作を配置するために、次のようなものだろう:
ThreadPool.QueueUserWorkItem(新しいWaitCallback(targetMethod)、新しいObject2PassInを());
TPLのParallel.ForEach()は、ホストコンピュータが1つのコアしか持たない状況で自動的にバックグラウンドスレッドに呼び出しを行いますか?あるいは、私は、少なくとも1つのコアコンピュータから実行している場合、少なくともそのロジックがGUIのディスパッチスレッドから外れるように、バックグラウンドのTADコールを起動する必要がありますか?
TPLを担当しているすべての私は、これは、それはまだバックグラウンドスレッドにParallel.ForEach()ループ内のコードをmarshallsそれが単一のコアボックスであることを確認したい場合は、私のGUIをブロックしないように、私がやったように。
あなたが持つかもしれない考えやアドバイスをしてくれてありがとう...
TPL Rocks! TPL通話と「標準」運賃を使用してわずかな調整だけで、さまざまなアプリを作成することができます。私は様々なアイテムの処理時間を80%以上カットしています。 MSは本当にこの1人の偉大な就職仲間の公園からそれをノックアウトしました。 – BonanzaDriver