我很好奇.NET属性Environment.ProcessorCount实际返回的内容.它是返回核心数,处理器数还是两者兼有?如果我的计算机有2个处理器,每个处理器有4个核心,将Environment.ProcessorCount返回2,4或8?
在我的机器上,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配置导致错误的窗口.
我需要一种可靠的方法来检测计算机上有多少CPU核心.我正在创建一个数字密集的模拟C#应用程序,并希望创建最大数量的运行线程作为核心.我已经尝试了许多围绕互联网建议的方法,比如Environment.ProcessorCount,使用WMI,这段代码:http://blogs.adamsoftware.net/Engine/DeterminingthenumberofphysicalCPUsonWindows.aspx 他们似乎都不认为AMD X2有两个内核.有任何想法吗?
编辑:似乎Environment.ProcessorCount返回正确的数字.它位于具有超线程的英特尔CPU上,返回错误的数字.超线程的核心是2,当它应该只有1时.
我在Windows上编写一个程序,需要运行与可用内核一样多的线程.但我不知道如何获得核心数量.有任何想法吗?
我知道如何获取我的机器上的物理数量和逻辑处理器数量,但我想知道我的应用程序可以访问多少个逻辑处理器.
例如,我在四核机器上开发,但我有许多单核用户,并且在许多情况下我"愚弄"接口,或遇到多核系统从未经历过的锁定问题.
所以,为此我设置了VSTS来在调试或"Debug Single Core"中构建我的应用程序.目标基本上是将处理器亲和性设置为核心"0",通过查看Windows任务管理器正在按预期工作.
我的问题是,我只是注意到了,(后面的视线显然应该是显而易见的),在我的代码中Environment.ProcessorCount >= something,我的代码非常适用于真正的单核机器,但是没有给我一个关于我的单个"逻辑可用"的读物核心".
如何获得"可用"逻辑核心的数量?
C#首选
我有一台机器上的以下怪异的行为与40芯:调用System.Environment.ProcessorCount在fsi(12.0.30815.0)和fsianycpu(12.0.30815.0)导致不同的结果.
在fsi我进入System.Environment.ProcessorCount = 32fsianycpu我得到System.Environment.ProcessorCount = 40.这似乎也会影响任务并行库,当运行简单的测试代码fsi(处理器数量错误)时,它只使用所有可用内核的80%.
可能是什么原因?