在我的机器上,Windows 7-Enterprise,带有1 x Intel Xeon E5-1660 0 @ 3.30Ghz(已激活Hyper Threading的6核/cpu),Environment.ProcessorCount返回12,这是准确的。
在具有2个Intel Xeon E5-2697 v3 @ 2.60GHz(激活了超线程的14核/cpu(我认为是因为任务管理器显示:2个套接字,28个核,56个逻辑处理器))的Windows Server 2012上,Environment.ProcessorCount返回28,这在我们看来是错误的,因为2x14x2 = 56。
为什么在Windows Server 2012 C#方法Environment.ProcessorCount不能返回正确数量的逻辑处理器?
作为附加信息,环境变量如下:
NUMBER_OF_PROCESSORS = 28
更新2015-05-26:
在我的另一个问题Unable to use more than one processor group for my threads in a C# app中,有一个有关此错误的更多详细信息/原因。我主要认为C#仅使用一个处理器组。令人讨厌的是,在我们的服务器上,尽管只有56个逻辑处理器,但有2个处理器组。但是这个HP CUSTOMER ADVISORY解释了为什么我们的服务器BIOS配置导致窗口错误。
最佳答案
在文档中可能有一个提示:
“如果当前计算机包含多个处理器组,则此属性返回可用的供公共(public)语言运行库(CLR)使用的逻辑处理器的数量。”
这可能是这里的问题吗?
MSDN Article
发现了一些有趣的东西:
默认情况下,该池仅限于单个处理器组(http://msdn.microsoft.com/en-us/library/windows/desktop/dd405503(v=vs.85).aspx),因此仅限于64个内核。但是,在.NET 4.5中,您可以设置Thread_UseAllCpuGroups enabled =“true”标志。
MSDN Forum Post