我在计算CPU itilization时遇到了一个不同的行为。
在我的代码中,我使用性能计数器“处理器时间”、实例“总计”和
它似乎工作正常(Windows性能监视器显示相同的值,Sysinternals Process Explorer也显示相同的值)
,但是
如果电源选项允许平衡CPU速度和CPU
在给定时刻以较低的频率运行。
有没有C函数的C,perf。计数器。。要提供此(任务管理器)值,
或者读取当前的CPU频率并以某种方式进行计算?
最佳答案
如果有人要面对这个要求,我想告诉你我是如何解决的:
显然,Windows8包含一个名为“%处理器实用程序”的性能监视器计数器。这是Win 8的任务管理器中显示的,Win 10是CPU利用率。
此计数器与通常用于显示CPU使用情况的“%处理器时间”不同,它考虑了平衡的CPU速度。
%处理器实用程序是指一个处理器正在完成的工作量,占处理器在正常性能下运行且从不空闲时可以完成的工作量的百分比。在某些处理器上,处理器实用程序可能超过100%。
在c代码段中:
PerformanceCounter _cpuCounter = new PerformanceCounter("Processor Information", "% Processor Utility", "_Total");
CounterSample firstValue = _cpuCounter.NextSample();
Thread.Sleep(500);
CounterSample secondValue = _cpuCounter.NextSample();
string cpuUsage = CounterSample.Calculate(firstValue, secondValue).ToString("0.0");