c#Environment.ProcessorCount并不总是返回完整数量的逻辑处理器,为什么?

在我的机器上,Windows 7 – Enterprise 1 x Intel Xeon E5-1660 0 @ 3.30Ghz(激活超线程的6核/ CPU),Environment.ProcessorCount返回12,这是准确的。

在具有2 x Intel Xeon E5-2697 v3 @ 2.60GHz的Windows Server 2012上(启动了超线程的14核/ CPU(我认为因为任务管理器显示:2个插槽,28个核心,56个逻辑处理器)),Environment.ProcessorCount返回因为2x14x2 = 56,我们认为这是错误的。

为什么在Windows Server 2012 c#方法Environment.ProcessorCount没有返回正确数量的逻辑处理器?

作为附加信息,环境变量如下:NUMBER_OF_PROCESSORS = 28

任务管理器

更新2015-05-26:

在我的另一个问题中有更多关于此相关错误的详细信息/原因: 无法在C#应用程序中为我的线程使用多个处理器组 。 主要是我认为C#只使用一个处理器组。 有什么问题,在我们的服务器上,有2个处理器组,尽管只有56个逻辑处理器。 但是这个惠普客户顾问解释了为什么我们的服务器BIOS配置导致错误的窗口。

文档中可能有一些提示:

“如果当前机器包含多个处理器组,则此属性返回可供公共语言运行库(CLR)使用的逻辑处理器的数量。”

这可能是问题吗?

MSDN文章

找到其他有趣的东西:

默认情况下,池仅限于一个处理器组( http://msdn.microsoft.com/en-us/library/windows/desktop/dd405503(v=vs.85).aspx ),因此限制为64个核心。 但是,在.NET 4.5中,您可以设置Thread_UseAllCpuGroups enabled =“true”标志。

MSDN论坛post

根据上的MSDN文档,您需要设置以下内容以查看和使用所有CPU组:

        

检查系统NUMBER_OF_PROCESSORS环境变量。 这是什么方法返回。 请参阅MSDN文章: http : //msdn.microsoft.com/en-us/library/system.environment.processorcount%28v=vs.100%29.aspx (权限部分)。