如何检测Windows 64位上的CPU速度?

问题描述:

我从这里找到下面的代码“http://www.boyet.com/Articles/CodeFromInternet.html”。
它以GHz为单位返回CPU的速度,但仅适用于32位Windows。如何检测Windows 64位上的CPU速度?

using System; 
using System.Management; 

namespace CpuSpeed 
{ 
    class Program 
    { 
     static double? GetCpuSpeedInGHz() 
     { 
      double? GHz = null; 
      using (ManagementClass mc = new ManagementClass("Win32_Processor")) 
      { 
       foreach (ManagementObject mo in mc.GetInstances()) 
       { 
        GHz = 0.001 * (UInt32) mo.Properties["CurrentClockSpeed"].Value; 
        break; 
       } 
      } 
      return GHz; 
     } 

     static void Main(string[] args) 
     { 
      Console.WriteLine("The current CPU speed is {0}", (GetCpuSpeedInGHz() ?? -1.0).ToString()); 
      Console.ReadLine(); 
     } 
    } 
} 


我搜索过的64位管理类,但没有成功。
有没有其他方法可以在64位Windows下获得CPU速度?下面

+1

呃..什么让你觉得这只适用于32位Windows? – 2011-10-07 07:32:04

我已经使用基于由Binoj安东尼的回答不仅是第一个将下面的代码返回的速度为每个CPU /核心:

Microsoft.Win32.RegistryKey registrykeyHKLM = Microsoft.Win32.Registry.LocalMachine; 
string cpuPath = @"HARDWARE\DESCRIPTION\System\CentralProcessor"; 
Microsoft.Win32.RegistryKey registrykeyCPUs = registrykeyHKLM.OpenSubKey(cpuPath, false); 
StringBuilder sbCPUDetails = new StringBuilder(); 
int iCPUCount; 
for (iCPUCount = 0; iCPUCount < registrykeyCPUs.SubKeyCount; iCPUCount++) 
{ 
    Microsoft.Win32.RegistryKey registrykeyCPUDetail = registrykeyHKLM.OpenSubKey(cpuPath + "\\" + iCPUCount, false); 
    string sMHz = registrykeyCPUDetail.GetValue("~MHz").ToString(); 
    string sProcessorNameString = registrykeyCPUDetail.GetValue("ProcessorNameString").ToString(); 
    sbCPUDetails.Append(Environment.NewLine + "\t" + string.Format("CPU{0}: {1} MHz for {2}", new object[] { iCPUCount, sMHz, sProcessorNameString })); 
    registrykeyCPUDetail.Close(); 
} 
registrykeyCPUs.Close(); 
registrykeyHKLM.Close(); 
sCPUSpeed = iCPUCount++ + " core(s) found:" + sbCPUDetails.ToString(); 

随时根据您的需求定制它。

+0

这会返回当前速度还是最大速度? – 2009-03-17 10:53:35

代码应该做的伎俩

RegistryKey registrykeyHKLM = Registry.LocalMachine; 
    string keyPath = @"HARDWARE\DESCRIPTION\System\CentralProcessor\0"; 
    RegistryKey registrykeyCPU = registrykeyHKLM.OpenSubKey(keyPath, false); 
    string MHz = registrykeyCPU.GetValue("~MHz").ToString(); 
    string ProcessorNameString = (string)registrykeyCPU.GetValue("ProcessorNameString"); 
    registrykeyCPU.Close(); 
    registrykeyHKLM.Close(); 
    Console.WriteLine("{0} MHz for {1}", MHz, ProcessorNameString); 
+0

我已将代码重写为包含一些错误,并且只返回了CPU /代码0的MHz。请参阅我的标记回复。也非常感谢您的代码。 – Marc 2009-03-16 15:00:37

Binoj提供的答案的简单版本如下。这将返回CPU的最大时钟速度。请注意,如果您希望机器上的总可用周期数,请将此值乘以Environment.ProcessorCount

private float GetCpuClockSpeed() 
{ 
    return (int) Registry.GetValue(@"HKEY_LOCAL_MACHINE\HARDWARE\DESCRIPTION\System\CentralProcessor\0", "~MHz", 0); 
} 
+0

请注意,虽然目前市场上的大多数处理器对所有内核都使用相同的时钟,但可能有些不支持。你必须为所有内核总结所有速度。 – Dani 2011-08-17 15:54:09