【问题标题】:PerformanceCounter (and Performance Monitor) showing different result than Task ManagerPerformanceCounter(和性能监视器)显示与任务管理器不同的结果
【发布时间】:2020-09-04 07:00:20
【问题描述】:

我有以下代码:

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

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

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

编辑

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

【问题讨论】:

    标签: c# .net performance resources


    【解决方案1】:

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

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

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

    应该这样做。

    【讨论】:

    • 谢谢。但这并没有什么不同。
    • 嗯。有趣的。您是否至少采集了两个样本,中间间隔 1 秒才能正确计算?
    • 另外,它是否匹配 perfmon 值?
    • 我每秒连续采样一次。
    • 感谢您的提示。 Perfmon 匹配我的,而不是任务管理器的。奇怪。
    【解决方案2】:

    如果你使用这个,你可以用任务管理器得到同样的结果:

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

    【讨论】:

    • 太棒了!我到处找这个谢谢
    • 老兄,在 windows 10 pro 上它刚刚达到 137%
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-01
    • 1970-01-01
    • 2011-01-19
    • 1970-01-01
    • 2023-03-28
    相关资源
    最近更新 更多