【问题标题】:Correct way to use PerformanceCounter in .NET to measure CPU usage在 .NET 中使用 PerformanceCounter 测量 CPU 使用率的正确方法
【发布时间】:2012-07-15 07:24:02
【问题描述】:

我想衡量我的商务舱在 Web 服务中的性能。如何通过编码做到这一点?

我想知道我的业务类在执行其操作时消耗了多少 CPU,以及如果 Web 服务同时获得多个服务调用,性能有何变化。

我不想衡量我的网络服务的性能;我只想知道我的商务舱表现如何。

我的想法:

在阅读了一些博客之后,我决定编写一些代码来创建PerformanceCounter,如下所示。通过该代码,我可以在一个 for 循环中创建多个线程。每个线程都会调用我的类。并且在同一个for 循环中,我将在计数器实例上调用NextValue() 方法。

System.Diagnostics.PerformanceCounter CpuCounter = new System.Diagnostics.PerformanceCounter();
            CpuCounter.CategoryName = "Process";
            CpuCounter.CounterName = "% Processor Time";
            CpuCounter.InstanceName = Process.GetCurrentProcess().ProcessName;

问题:

  1. 这种方法正确吗?
  2. 我应该使用“进程”类别还是“处理器”类别?
  3. 如何获取性能数据以从中创建一些报告?例如使用 100 个并发线程时,CPU 使用率为 70%,使用 200 个线程时,CPU 使用率高达 90%,等等。
  4. 我的业务逻辑很快就结束了。另一方面,NextValue() 方法在 this 博客中提到的一秒间隔后给出正确的值。我该如何处理?
  5. 有时,NextValue() 方法给出的值高于 100。这是否意味着 CPU 使用率超过 100%? (我认为,这个计数器的值不应该被解释为 CPU 的使用百分比。我说的对吗?)

注意:我使用的是 Windows 7 Premium 和 Intel Core i5 处理器。这是我第一次使用性能计数器。所以有些问题可能很傻。

【问题讨论】:

    标签: c# .net performancecounter performance-testing


    【解决方案1】:

    我已按以下顺序回答了您的问题:

    1:如果您的商务舱是您的应用程序在分析期间唯一处于活动状态的部分,可以。但是,Perfmon 最适合对整个应用程序进行大规模分析,它并不是真正为特定方法设计的。要了解完成 BusinessClass.Work() 需要多少 CPU 周期,最好使用 JetBrains dotTrace 或 Redgate 的 ANTS profiler 之类的东西。这两种产品都提供免费试用。

    2:进程是您正在做的事情的正确计数器

    3:您可以添加自己的计数器,或按时间片执行测试。执行此操作的更简单方法是时间片方法,您基本上运行一系列测试,在每个测试之间仅更改一个变量。在测试之间等待 5-10 秒,没有任何活动,这让您的性能图有一个很好的休息时间。您还需要设置性能计数器日志,here.

    对此进行了解释

    4:见答案 1,分析器对于方法级别的计时要好得多

    5:这是意料之中的。您的最大 CPU % 实际上是 100 * Processor Count。因此,如果您的 i5 是双核,则最大值为 200%,如果是四核,则为 400%,等等...

    如果您有任何问题,请告诉我。

    【讨论】:

    • 感谢您的回答并提及 dotTrace 等工具。使用Process.TotalProcessorTime 属性解决这个问题怎么样?
    • 没问题。使用 TotalProcessorTime 属性可以正常工作,但您需要确保对方法进行大量迭代以过滤掉应用程序启动、Jit 等产生的噪音……1000 万通常是一个很好的起点。
    • 关于第 5 点:我检查了我的处理器 (Intel core i7 2640M) 的规格,它只有 2 个内核和 4 个线程。但是,我的进程的性能计数器有时会给出超过 800 的 % Processor Time 值。这意味着第 5 点存在一些误解/错误。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-09-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-06
    相关资源
    最近更新 更多