在C#
中,如何适当地设置ThreadPool
?
ThreadPool.SetMaxThreads(int workerThreads, int completionPortThreads)
我希望线程数等于处理器核心数,但我不确定异步I/O线程(第二个参数)。
我可以简单地说像ThreadPool.SetMaxThreads(Environment.ProcessorCount, 0)
这样的话,让操作系统自己推断第二个参数吗?
在C#
中,如何适当地设置ThreadPool
?
ThreadPool.SetMaxThreads(int workerThreads, int completionPortThreads)
我可以简单地说像ThreadPool.SetMaxThreads(Environment.ProcessorCount, 0)
这样的话,让操作系统自己推断第二个参数吗?
最大完成端口线程用于异步任务,如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
函数获取的值。