C# 在.NET中使用PerformanceCounter测量CPU使用率的正确方法

C# 在.NET中使用PerformanceCounter测量CPU使用率的正确方法,c#,.net,performancecounter,performance-testing,C#,.net,Performancecounter,Performance Testing,我想在web服务中度量我的业务类的性能。如何通过编码来实现 我想知道我的业务类在执行其操作时消耗了多少CPU,以及如果web服务同时得到多个服务调用,性能如何变化 我不想衡量我的web服务的性能;我只是想知道我的商务课表现如何 我的想法: 在阅读了一些博客之后,我决定写一些代码来创建一个PerformanceCounter,如下所示。根据这些代码,我可以在一个循环中为创建多个线程。每个线程将调用我的类。在相同的for循环中,我将调用计数器实例上的NextValue()方法 System.Diag

我想在web服务中度量我的业务类的性能。如何通过编码来实现

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

我不想衡量我的web服务的性能;我只是想知道我的商务课表现如何

我的想法:

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

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

  • 这种方法正确吗
  • 我应该使用“流程”类别还是“处理者”类别
  • 如何获取性能数据以创建相关报告?e、 g.对于100个并发线程,CPU使用率为70%,对于200个线程,CPU使用率达到90%,等等
  • 我的业务逻辑很快就结束了。另一方面,
    NextValue()
    方法在间隔1秒后给出正确的值,如blog中所述。我该怎么办
  • 有时,
    NextValue()
    方法给出的值大于100。这是否意味着CPU使用率超过100%?(我认为,这个计数器的值不应该被解释为CPU的使用率%,我说的对吗?)

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

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

    1:如果您的业务类是分析期间应用程序的唯一活动部分,则可以。然而,Perfmon最适合于对entier应用程序进行大规模评测,它并不是专门为特定方法设计的。要了解完成BusinessClass.Work()需要多少CPU周期,最好使用JetBrains dotTrace或Redgate的ANTS profiler之类的工具。这两种产品都提供免费试用

    2:过程是你所做事情的正确计数器

    3:您可以添加自己的计数器,或者在时间片中执行测试。实现这一点的更简单方法是时间片方法,在时间片方法中,基本上运行一系列测试,在每个测试之间只更改一个变量。在测试之间,等待5-10秒,不进行任何活动,这使您的perfmon图有了一个很好的突破。您还需要设置一个性能计数器日志,如下所述

    4:参见答案1,探查器在方法级计时方面更好

    5:这是意料之中的。您的最大CPU%实际上是100*处理器计数。所以如果你的i5是双核的,最大值是200%,如果是四核的,最大值是400%,等等


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

    感谢您的回答和对dotTrace等工具的介绍。使用
    Process.TotalProcessorTime
    属性解决此问题如何?没问题。使用TotalProcessorTime属性可以很好地工作,但是您需要确保运行了大量的方法,以过滤掉应用程序启动、Jit等过程中的噪音。。。1000万通常是一个很好的起点。关于第5点:我检查了我的处理器的规格(
    Intel core i7 2640M
    ),它只有2个内核和4个线程。但是,我的进程的性能计数器给出的
    %处理器时间
    值有时超过800。这意味着第5点存在一些误解/错误。