在ThreadPool
中设置C#
的适当方法是什么?
ThreadPool.SetMaxThreads(int workerThreads, int completionPortThreads)
我希望线程数等于处理器核心数,但我不确定异步I / O线程(第二个参数)。
我可以简单地说ThreadPool.SetMaxThreads(Environment.ProcessorCount, 0)
之类的内容,以便O / S推断出第二个参数本身吗?
答案 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
函数获得的值。