C#线程数

时间:2011-04-26 22:34:50

标签: c# multithreading parameters threadpool

ThreadPool中设置C#的适当方法是什么?

ThreadPool.SetMaxThreads(int workerThreads, int completionPortThreads)

我希望线程数等于处理器核心数,但我不确定异步I / O线程(第二个参数)。

我可以简单地说ThreadPool.SetMaxThreads(Environment.ProcessorCount, 0)之类的内容,以便O / S推断出第二个参数本身吗?

1 个答案:

答案 0 :(得分:6)

最大完成端口线程由异步任务使用,例如Socket.Begin*Socket.*Async以及其他与IO相关的任务。我建议如果更改工作线程,那么您应该在更改值之前检查当前最大完成线程数:

int maxWorkerThreads;
int maxCompletionThreads;

// Get the maximum number of completion threads
ThreadPool.GetMaxThreads(out maxWorkerThreads, out maxCompletionThreads);

// Set the new max worker threads, but keep the old max completion threads
ThreadPool.SetMaxThreads(someDifferentValue, maxCompletionThreads);

我认为默认情况下,最大完成线程数为1000,但这可能因机器而异。为了安全起见,请使用从GetMaxThreads函数获得的值。