Я использую Threadpool для параллельной обработки в С# .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 эту проблему?.. Приведенный выше код будет работать на четырехъядерном процессоре.