PerformanceCounter(和性能监视器)显示与任务管理器不同的结果

时间:2016-10-06 20:04:21

标签: c# .net performance resources

我有以下代码:

PerformanceCounter c = new PerformanceCounter("Processor", "% Processor Time", "_Total");

然后我将其用于:c.NextValue()

我得到的是任务管理器管理器显示的cpu利用率的两倍。虽然我的cpu有2个核心,据我所知that's not supposed to make a difference。那为什么会这样呢?或者我错误的双核导致它? (虽然搜索了一段时间,我找不到任何性能计数器列表的文档。)

修改

正如评论中所建议的,我尝试了perfmon(性能监视器),它显示了我得到的相同结果。为什么会出现这种差异?

2 个答案:

答案 0 :(得分:2)

根据this blog,如果要匹配任务管理器的确切值,则应使用“处理器信息”而不是“处理器”。问题是什么价值是正确的,但我认为这是一个设计决定。

  

对于执行性能测试和分析的人员而言   记录CPU利用率数据是至关重要的。数据收集器   set可以通过logman.exe配置来记录“%Processor   用于此目的的“处理器信息”对象中的“计数器”。

PerformanceCounter c = new PerformanceCounter("Processor Information", "% Processor Time", "_Total");

应该这样做。

答案 1 :(得分:0)

如果使用此选项,则可以通过任务管理器获得相同的结果:

 cpuCounter = new PerformanceCounter(
            "Processor Information",
            "% Processor Utility",
            "_Total",
            true
        );