在我的机器上,Windows 7 - 企业版1 x Intel Xeon E5-1660 0 @ 3.30Ghz(激活超线程的6核/ CPU),Environment.ProcessorCount返回12,这是确切的。
在Windows Server 2012上使用2 x Intel Xeon E5-2697 v3 @ 2.60GHz(启动了超线程的14核/ CPU(我认为因为任务管理器显示:2个插槽,28个核心,56个逻辑处理器)),环境.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#只使用一个处理器组。有什么问题,在我们的服务器上,有2个处理器组,尽管只有56个逻辑处理器。但是这个HP CUSTOMER ADVISORY解释了为什么我们的服务器BIOS配置导致错误的窗口。
答案 0 :(得分:6)
文档中可能有一些提示:
&#34;如果当前计算机包含多个处理器组,则此属性返回公共语言运行时(CLR)使用的逻辑处理器的数量 。&#34; < / p>
这可能是问题吗? 找到其他有趣的东西: 默认情况下,池仅限于一个处理器组(http://msdn.microsoft.com/en-us/library/windows/desktop/dd405503(v=vs.85).aspx),因此限制为64个核心。但是,在.NET 4.5中,您可以设置Thread_UseAllCpuGroups enabled =&#34; true&#34;标志。
答案 1 :(得分:4)
根据the MSDN docs on <Thread_UseAllCpuGroups>,您需要设置以下内容以查看和使用所有CPU组:
<configuration>
<runtime>
<Thread_UseAllCpuGroups enabled="true"/>
<GCCpuGroup enabled="true"/>
<gcServer enabled="true"/>
</runtime>
</configuration>
答案 2 :(得分:0)
检查系统NUMBER_OF_PROCESSORS环境变量。这是什么方法返回。请参阅MSDN文章:http://msdn.microsoft.com/en-us/library/system.environment.processorcount%28v=vs.100%29.aspx(权限部分)。