2009-08-18 11 views

答えて

9

スレッドプールのサイズを変更する場合は注意が必要です。 固定システムスレッドプールがあり、あらゆる種類のものが使用します。それを小さすぎると、使用していないと思われる領域に問題が発生する可能性があります。

特定のタスクに対してスレッドプールを比較的小さくしたい場合は、別のプールを使用する必要があります。利用可能なサードパーティーのプールは数多くあります。私はかなり古いものをMiscUtilの一部として持っていますが、単純なユースケースには十分に適しているはずです。あなたが見ていると、より高度なものを見つけることができると確信しています。

フレームワークにはまだインスタンス化可能なThreadPoolが存在しないことは残念です。 Parallel Extensionsが効果的に1つを提供するかどうかはわかりませんが、私はそうではありませんと考えています。

+0

.NET 4.0のParallel Extensionsは、基本クラスライブラリの標準ThreadPoolを実際に使用します。彼らは自分自身を提供しません。 (BCL ThreadPoolクラスは、.NET 4で改良され、並列拡張を効率的に稼働させるために必要な多くの機能を追加しました。例えば、.NET 3.5よりはるかに優れたスケジューラを持っていますThreadPool) –

+0

@Reed:うん、私はシステムスレッドプールを使ってPFXの通常のビットを知っていた...私も作成することができる新しいものがあったかどうかは確かではなかった。まぁ。 –

4
ThreadPool.SetMaxThreads() 
+0

別の非静的な方法はありますか?これで、すべてのThreadPoolsがサイズを決めるわけではありません - 私は、ThreadPoolの単一のインスタンスに特定のサイズを持たせたいだけです。 – DLauer

+2

プロセスごとに1つのBCL ThreadPoolしかありません。あなたのシナリオだけでスレッドプールが必要な場合は、サードパーティのライブラリを見つける必要があります。 –

+0

これはおそらく、実行時には実行できないことに注意する価値があります。もちろん、スレッド内の例外は1.1でメモリ破損の原因となる可能性があるので、使用しないでください。 – quillbreaker

0

ThreadPool.SetMaxThreads(5,5)5つのスレッドを超えるものはキューに入れられます。

0

ThreadPool.SetMaxThreads()メソッドが必要です。

4

ThreadPool.SetMinThreadsThreadPool.SetMaxThreadsを使用して、スレッドプール内のスレッド数を制御できます。

言われているように、私はこれを慎重に使用することをお勧めします。 BCLの多くの操作では、スレッドプールスレッドが使用可能であるため、トラブルに陥るのは簡単です。

関連する問題