System.Threading.ThreadPool.SetMaxThreads 的默认值

问题描述 投票:0回答:3

假设我没有通过调用函数显式设置任何值:

System.Threading.ThreadPool.SetMaxThreads

默认值是多少?

c# .net default threadpool
3个回答
27
投票

取决于.NET框架版本,在2.0、3.0和4.0中发生了变化。在 2.0 中,核心数量增加了 50 倍。在 3.0(又名 2.0 SP1)中,核心数量增加了 250 倍,4.0 使其根据位数和操作系统资源而动态变化。如果我没记错的话,最大 I/O 完成线程始终为 1000。

一般来说,它非常高,程序应该“永远”接近。在 32 位机器上,当所有这些线程以其 1 MB 堆栈消耗可用虚拟内存时,程序很可能首先因 OOM 而崩溃。一般来说,只有当有大量 TP 线程请求并且正在运行的线程在分钟内没有完成时,它才会失控。 TP 线程的理想情况是不超过半秒。 “调试”>“窗口”>“线程”调试器窗口讲述了令人不快的事实。并给出了很好的提示为什么这些 TP 线程没有完成,你可以看到它们的调用堆栈。


5
投票

ThreadPool文档

每个进程有一个线程池。从 .NET 开始 框架版本4,进程的线程池的默认大小 取决于几个因素,例如虚拟地址的大小 空间。进程可以调用
GetMaxThreads

方法来确定 线程数。线程池中的线程数量可以是 使用

SetMaxThreads
方法进行更改。每个线程都使用 默认堆栈大小并以默认优先级运行。

注意

托管 .NET Framework 的非托管代码可以更改 线程池通过使用 CorSetMaxThreads
函数,定义在 mscoree.h 文件。


    


2
投票
GetMaxThreads()

 找到它
    

© www.soinside.com 2019 - 2024. All rights reserved.