我有一个运行Active Directory设备的域。我从域中获取所有计算机并以新线程连接到每台计算机。但最大线程数不超过100.那么一次可以扫描的最大线程数和最大机器数是多少?
修改
var scanningThreads = new Thread[scannThreads + 1];
for (int i = 0; i < scannThreads; i++)
{
scanningThreads[i] = new Thread(ShowMembersOfAdministratorsGroup) {IsBackground = true};
scanningThreads[i].Start(new ParametersWrapper()
{ Computers = computers.GetRange(0, scanningComputers), Event = e });
computers.RemoveRange(0, scanningComputers);
}
答案 0 :(得分:0)
最大线程数是多少?
答案是:很多!当然超过100.其中一个限制因素是内存 - 每个.NET线程分配一个1MB的堆栈。
您永远不希望在一个应用程序中接近该数字。理想情况下,您将拥有与核心相同数量的线程,并且没有阻塞调用。这是因为线程是大资源,并且因为当OS调度线程运行时,执行上下文切换需要很长时间(到CPU)。
理想情况下,您需要重新考虑您的设计并使用在线程池上运行的异步方法和延续。是否存在与ShowMembersOfAdministratorsGroup
中的阻止调用等效的异步?那么你就不必创建那么多只阻塞网络I / O的线程。