性能计数器的价值很奇怪

时间:2018-03-31 11:02:30

标签: c# .net

我使用以下代码来确定计算机的总CPU使用率。

private int getCPUUsage()
{
    PerformanceCounter cnt = new PerformanceCounter("Processor", "% Processor Time", "_Total");
    return (int)cnt.NextValue();
}

但是,任务管理器的CPU使用率约为20%,但函数的输出值大多为0,有时为100。
奇怪的是,当我将MessageBox放在函数中间时,MessageBox的值是错误的,但返回值是正确的。

private int getCPUUsage()
{
    PerformanceCounter cnt = new PerformanceCounter("Processor", "% Processor Time", "_Total");
    MessageBox.Show(cnt.NextValue().ToString()); //Just 0
    return (int)cnt.NextValue(); //Right Value
}

所以我运行cnt.NextValue()两次而不是MessageBox,但结果与原始代码相同。
如何正常获取PerformanceCounter的CPU使用率?

1 个答案:

答案 0 :(得分:3)

第一个值将始终为0,因为无法比较。

您必须多次运行才能进行比较。来自MSDN

  

如果计数器的计算值取决于两个计数器读数,则   第一次读取操作返回0.0。重置性能计数器   指定不同计数器的属性相当于创建一个   新的性能计数器,以及使用新的第一个读取操作   属性返回0.0。呼叫之间建议的延迟时间   NextValue方法是一秒钟,以允许计数器执行   下一次增量阅读。