Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#螺纹数_C#_Multithreading_Parameters_Threadpool - Fatal编程技术网

C#螺纹数

C#螺纹数,c#,multithreading,parameters,threadpool,C#,Multithreading,Parameters,Threadpool,在C#中设置线程池的适当方法是什么 我希望线程数等于处理器内核数,但我不确定异步I/O线程(第二个参数) 我可以简单地说一些类似于ThreadPool.SetMaxThreads(Environment.ProcessorCount,0)的东西,以便O/S推断第二个参数本身吗?最大完成端口线程由异步任务使用,例如Socket.Begin*或Socket.*Async和其他与IO相关的任务。我建议,如果您更改工作线程,那么您应该在更改值之前检查当前最大完成线程数: int maxWorkerThr

C#
中设置
线程池的适当方法是什么

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


我可以简单地说一些类似于
ThreadPool.SetMaxThreads(Environment.ProcessorCount,0)
的东西,以便O/S推断第二个参数本身吗?

最大完成端口线程由异步任务使用,例如
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
函数获得的值。

为什么要这样做?“线程池已经为您优化了它的大小,这取决于它运行的机器-我认为您不能做得更好。”BrokenGlass同意。但是,如果,例如,我必须将最大线程数更改为
something!=核心计数
,我应该如何处理第二个参数?
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);