如何检测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速度?下面
我已经使用基于由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();
随时根据您的需求定制它。
这会返回当前速度还是最大速度? – 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);
我已将代码重写为包含一些错误,并且只返回了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);
}
请注意,虽然目前市场上的大多数处理器对所有内核都使用相同的时钟,但可能有些不支持。你必须为所有内核总结所有速度。 – Dani 2011-08-17 15:54:09
呃..什么让你觉得这只适用于32位Windows? – 2011-10-07 07:32:04