【问题标题】:C#: how to obtain the current clock speed of an Intel i-series CPU when TurboBoost is activatedC#:如何在启用 TurboBoost 时获取 Intel i 系列 CPU 的当前时钟速度
【发布时间】:2019-09-10 22:57:08
【问题描述】:

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

【问题讨论】:

  • CPU-Z 也反映了这一变化。也许看看他们是如何做到的。

标签: c# intel


【解决方案1】:

我认为仅使用安全/托管的 C# 代码不可能获得此信息,因为 WMI 似乎不提供此信息。所以我认为你需要使用 CPUID 指令从执行指令的 CPU 获取详细信息。

这份来自英特尔的文档可能会帮助您入门:

http://www.intel.com/assets/pdf/appnote/241618.pdf

这里有一些与 C# 一起使用的不安全代码:

An attempt to bring CPUID to C#

另见第 7 页:

Intel® Turbo Boost Technology in Intel® Core™ Microarchitecture (Nehalem) Based Processors

【讨论】:

  • 呵呵..几分钟前我刚刚在你的第二个链接中发现了那篇文章。不过,就如何使用该 DLL 从处理器获取当前时钟速度而言,这有点超出我的想象。至少,这看起来一点也不简单。
【解决方案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;
}

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

private void InfiniteLoop()
{
  int i = 0;

  while (true)
    i = i + 1 - 1;
}

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

我也在this question上发布了这个答案。

【讨论】:

  • 谢谢。 :) 这是一个非常古老的问题,当时没有用于本地获取此信息的 API。在 2010 年,Core i 还是很新的。
猜你喜欢
  • 2018-12-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-03-10
  • 1970-01-01
相关资源
最近更新 更多