Threadpool を使用して、c# .NET 2.0 で並列処理を行っています。
コード :
int MAXThreads=GetConfigValue("MaxThreadLimit"); //This value is read from app.config
ManualResetEvent[] doneEvents=new ManualResetEvent[MAXThreads];
for(int i=0;i<MaxThreads,i++)
{
doneEvents[i]=new ManualResetEvent(false);
//create workload
DoProcess job=new DoProcess(workload,doneEvents[i]);
ThreadPool.QueueUserWorkItem(job.ThreadPoolCallBack,i);
}
WaitHandle.WaitAll(doneEvents);
//proceed
Class DoProcess
{
private WorkLoad load;
private ManualResetEvent doneEvent;
public DoProcess(WorkLoad load,ManualResetEvent doneEvent)
{
this.load=load;
this.doneEvent=doneEvent;
}
public void ThreadPoolCallBack(object index)
{
//Do Processing
doneEvent.Set();
}
}
MAXThreads 値は構成から読み取られていますが、これは生成された実際のスレッド数とは関係がないと思います。すべてのワークロードを処理するスレッドはわずか 4 ~ 5 個です。スレッド数を 20 前後に固定したいのですが、どうすればこれを達成できますか? 何か不足していますか?..SetMaxThreads はこの問題に対処していますか?..上記のコードはクアッド コア CPU で実行されます。