C#线程数

Yip*_*Yay 5 c# parameters multithreading threadpool

什么是来设置适当的方式ThreadPoolC#

ThreadPool.SetMaxThreads(int workerThreads, int completionPortThreads)
Run Code Online (Sandbox Code Playgroud)

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

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

Kir*_*ril 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);
Run Code Online (Sandbox Code Playgroud)

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