题
你如何测量的物理处理器/核心。净?
解决方案
System.Environment.ProcessorCount
返回人数的逻辑处理器
http://msdn.microsoft.com/en-us/library/system.environment.processorcount.aspx
对于物理处理器计你可能需要使用WMI下列元数据的支持XP/Win2k3上(启用的功能在SP的前Vista/Win2k8).
Win32_ComputerSystem.NumberOfProcessors 返回的物理计数
Win32_ComputerSystem.NumberOfLogicalProcessors 返回的逻辑(废话!)
谨慎,超线程Cpu出现相同的至多会CPU是的性能特征 非常 不同。
检查HT启用Cpu审查每个实例的Win32_Processor和比较这两个属性。
Win32_Processor.NumberOfLogicalProcessors
Win32_Processor.NumberOfCores
在多核系统,这些通常是相同的价值。
此外,应注意的系统,可能有多重 处理器组, ,这是经常看到的计算机上有大量处理器。通过默认 .净将只采用第一组处理器 -这意味着默认情况下,线将利用仅Cpu从第一个处理器组, Environment.ProcessorCount
将只返回的数量Cpu在这个小组。根据 阿拉斯泰尔*Maw的答案, 此行为可以通过改变改变的程序。配置如下:
<configuration>
<runtime>
<Thread_UseAllCpuGroups enabled="true"/>
<GCCpuGroup enabled="true"/>
<gcServer enabled="true"/>
</runtime>
</configuration>
其他提示
虽然 Environment.ProcessorCount
确实可以获得系统中虚拟处理器的数量,但这可能不是您的进程可用的处理器数量。我掀起了一个快速的小静态类/属性来得到这个:
using System;
using System.Diagnostics;
/// <summary>
/// Provides a single property which gets the number of processor threads
/// available to the currently executing process.
/// </summary>
internal static class ProcessInfo
{
/// <summary>
/// Gets the number of processors.
/// </summary>
/// <value>The number of processors.</value>
internal static uint NumberOfProcessorThreads
{
get
{
uint processAffinityMask;
using (var currentProcess = Process.GetCurrentProcess())
{
processAffinityMask = (uint)currentProcess.ProcessorAffinity;
}
const uint BitsPerByte = 8;
var loop = BitsPerByte * sizeof(uint);
uint result = 0;
while (--loop > 0)
{
result += processAffinityMask & 1;
processAffinityMask >>= 1;
}
return (result == 0) ? 1 : result;
}
}
}
Environment.ProcessorCount还将包含任何超线程处理器。
没有办法(至少通过Windows 2003)将超线程处理器与具有两个核心的处理器区分开来。
System.Environment.ProcessorCount是您需要的
Environment.ProcessorCount
编辑:在.NET 2.0中提供,而不是在.NET 1.1中提供
没有足够的wiki代表,但请注意,除了XPSP2之外,Windows 2003 Server SP1和SP2还需要一个修补程序才能启用此功能:
您可以使用PowerShell访问全面的处理器信息。例如,您可以运行以下命令来获取CPU核心数:
Get-WmiObject -namespace root\CIMV2 -class Win32_Processor -Property NumberOfCores
使用某种浏览器工具时,研究WMI要容易得多。所以,我建议使用WMI浏览工具(例如 WMIExplorer 或 WMI CIM Studio )探索WMI类,属性和方法。