C#:激活TurboBoost时如何获取Intel i系列CPU的当前时钟速度

Cla*_*ire 5 c# intel

我知道有可能获取此信息-当TurboBoost处于活动状态时,英特尔自己的TurboBoost侧边栏小工具似乎使用ActiveX控件来确定i3 / i5 / i7 CPU的当前时钟速度。但是,我想在C#中以编程方式执行此操作-从WMI获取CurrentClockSpeed值以CPU设置的最大时钟速度达到最高,因此在TurboBoost模式下,它不报告当前的实际时钟速度。

Roo*_*lie 2

如果您想获得睿频速度,可以使用“% 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;
}
Run Code Online (Sandbox Code Playgroud)

InfiniteLoop 方法只是一个加 1 和减 1 的整数:

private void InfiniteLoop()
{
  int i = 0;

  while (true)
    i = i + 1 - 1;
}
Run Code Online (Sandbox Code Playgroud)

添加 InfiniteLoop 方法只是为了让 CPU 有事可做,并在此过程中加速。在获取下一个值并中止循环之前,允许循环运行一秒钟。

我也发布了这个问题的答案。