【问题标题】:How we can measure cpu time for a method using PerformanceCounter?我们如何测量使用 PerformanceCounter 的方法的 CPU 时间?
【发布时间】:2015-04-10 08:43:20
【问题描述】:

我想测量不使用 StopWatch 或 Process 而是使用 .NET 分析器 PerformanceCounter 的方法的 CPU 时间。

我看到他们是计算进程使用多少 cpu 的唯一方法

PerformanceCounter cpuCounter = new PerformanceCounter("Process", "% Processor Time", ProcessName);
CounterSample cs1 = cpuCounter.NextSample();

但我正在寻找在使用此 API 的过程中所花费的所有时间。

【问题讨论】:

  • 您是在代码内部测量此方法还是尝试测量第 3 方程序?此外,从您的 cmets 到 Patrik 的回答,这听起来像是 XY Problem。你有一个问题,你认为使用性能计数器是解决方案,所以你问如何使用性能计数器。而不是这样做编辑您的问题以询问您要解决的实际问题,您可以提及您认为性能计数器是解决它的方法,但您可能会得到更好的解决方案
  • 我已经使用了问题中提到的 StopWatch And Process 并且它不准确。我正在尝试检查是否有人已经使用 PerformanceCounter 来测量方法的时间(在方法中调用外部或内部代码)。如果我用 Process 或 StopWatch 运行该方法几次来测量时间,它会给我几个值,它们之间的间隔 > 0。所以我希望找到间隔 ==> 0 的最佳方法

标签: c# performance performancecounter measurement


【解决方案1】:

恐怕这是不可能的。 PerformanceCounter 旨在读取系统进程信息。系统没有关于您在流程中实际执行的操作的信息。

在单线程应用程序中,您可以使用PerformanceCounter 并从方法执行的开始到结束选择值(只需在调用方法之前调用NextSample 一次,然后收集调用它的结果)。

作为一种非编程方法,您可以使用 Visual Studios 性能分析工具来收集有关您的应用程序在哪种方法上花费了多少时间的更多信息。它为您提供了有关应用程序 CPU 消耗的非常深入的信息。快速介绍给here

【讨论】:

  • 那么如果我可以将这个方法运行到一个进程中,那么我可以计算这个进程的cpu时间?但是 NextSample 给出了使用的 %cpu 数量而不是时间对吗?
  • 每个样本都有自己的时间量。 NextSample 返回的值描述了自上次调用以来经过的时间段。所以每秒调用一次,你会得到那一秒中使用的 cpu 百分比 -> 1 秒的 70% 是 CPU 时间的 0.7 秒。该方法不是 100% 准确,但非常接近,基本上就足够了。更准确的方法是测量调用之间经过的时间(使用Stopwatch)然后计算 CPU 时间。
  • Yes Nextsample 只返回 %cpu 使用的时间,而不是进程在 cpu 期间所用的时间(如 Process.TotalProcess)但是当它们在 Cpu 中时,秒表将只计算面部时间,包括其他后台进程(计划东西)。而且也不准确。所以我认为最好的方法是像使用计时器一样计算我们的计时器,但秒表但我不知道该怎么做。如果你对如何创建这个计时器有任何想法,这对我很有帮助;)
  • 我不确定你的计时器是什么意思。但是同时使用 Stopwatch 和 PerformanceCounter 会产生给定时间段内 cpu 使用率的百分比,即乘以 cpu 时间。
  • 我已经使用了问题中提到的 StopWatch And Process 并且它不准确。我正在尝试检查是否有人已经使用 PerformanceCounter 来测量方法的时间(在方法中调用外部或内部代码)。如果我用 Process 或 StopWatch 运行该方法几次来测量时间,它会给我几个值,它们之间的间隔 > 0。所以我希望找到间隔 ==> 0 的最佳方法
猜你喜欢
  • 2012-07-15
  • 2012-06-16
  • 2021-03-22
  • 1970-01-01
  • 2014-09-23
  • 1970-01-01
  • 2013-12-25
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多