![](/img/trans.png)
[英]C# - How to get a CPU Temp / CPU Load / Current Voltage / VID Voltage / Current Frequency with LibreHardwareMonitor?
[英]How to get CPU frequency in c#
如何在C#中獲得CPU頻率(例如:2Ghz)? 這很簡單,但是我在環境變量中找不到它。 謝謝 :)
var searcher = new ManagementObjectSearcher(
"select MaxClockSpeed from Win32_Processor");
foreach (var item in searcher.Get())
{
var clockSpeed = (uint)item["MaxClockSpeed"];
}
如果您希望獲得其他字段,請查看類Win32_processor
試試這個代碼
using System.Management;
uint currentsp , Maxsp;
public void CPUSpeed()
{
using(ManagementObject Mo = new ManagementObject("Win32_Processor.DeviceID='CPU0'"))
{
currentsp = (uint)(Mo["CurrentClockSpeed"]);
Maxsp = (uint)(Mo["MaxClockSpeed"]);
}
}
可以將信息從注冊表中刪除,但是如果它在Windows XP或更早版本(Windows 7或更高版本)上有效,則不知道。
HKEY_LOCAL_MACHINE/HARDWARE/DESCRIPTION/CentralProcessor/0/ProcessorName
讀起來像
Intel(R) Core(TM)2 Quad CPU Q6600 @ 2.40GHz
為了我。
像這樣的代碼可以檢索信息(未經測試):
RegistryKey processor_name = Registry.LocalMachine.OpenSubKey(@"Hardware\Description\System\CentralProcessor\0", RegistryKeyPermissionCheck.ReadSubTree);
if (processor_name != null)
{
if (processor_name.GetValue("ProcessorNameString") != null)
{
string value = processor_name.GetValue("ProcessorNameString");
string freq = value.Split('@')[1];
...
}
}
(來源: 此處 )
您可以通過WMI來獲取它,但是它很慢,因此,如果要在不止一次的情況下獲取它,我建議您對其進行緩存-類似於:
namespace Helpers
{
using System.Management;
public static class HardwareHelpers
{
private static uint? maxCpuSpeed = null;
public static uint MaxCpuSpeed
{
get
{
return maxCpuSpeed.HasValue ? maxCpuSpeed.Value : (maxCpuSpeed = GetMaxCpuSpeed()).Value;
}
}
private static uint GetMaxCpuSpeed()
{
using (var managementObject = new ManagementObject("Win32_Processor.DeviceID='CPU0'"))
{
var sp = (uint)(managementObject["MaxClockSpeed"]);
return sp;
}
}
}
}
如果要獲得渦輪速度,可以使用“%Processor Performance”性能計數器,並將其與WMI“ MaxClockSpeed”相乘,如下所示:
private string GetCPUInfo()
{
PerformanceCounter cpuCounter = new PerformanceCounter("Processor Information", "% Processor Performance", "_Total");
double cpuValue = cpuCounter.NextValue();
Thread loop = new Thread(() => InfiniteLoop());
loop.Start();
Thread.Sleep(1000);
cpuValue = cpuCounter.NextValue();
loop.Abort();
foreach (ManagementObject obj in new ManagementObjectSearcher("SELECT *, Name FROM Win32_Processor").Get())
{
double maxSpeed = Convert.ToDouble(obj["MaxClockSpeed"]) / 1000;
double turboSpeed = maxSpeed * cpuValue / 100;
return string.Format("{0} Running at {1:0.00}Ghz, Turbo Speed: {2:0.00}Ghz", obj["Name"], maxSpeed, turboSpeed);
}
return string.Empty;
}
InfiniteLoop方法只是一個整數,該整數得到1加上和減去:
private void InfiniteLoop()
{
int i = 0;
while (true)
i = i + 1 - 1;
}
只是添加了InfiniteLoop方法,以使CPU可以完成一些工作並在此過程中進行加速。 在獲取下一個值並使循環中止之前,允許循環運行一秒鍾。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.