3

我想衡量我的商务舱在 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()方法在一秒钟的间隔后给出正确的值,如博客所述。我该如何处理?
  5. 有时,NextValue()方法给出的值超过 100。这是否意味着 CPU 使用率超过 100%?(我认为,这个计数器的值不应该被解释为 CPU 的使用百分比。我正确吗?)

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

4

1 回答 1

4

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

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

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

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

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

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

请让我知道,如果你有任何问题。

于 2012-07-16T13:02:50.023 回答