【问题标题】:why UserProcessorTime don't give the same value for the same executions为什么 UserProcessorTime 不为相同的执行提供相同的值
【发布时间】:2015-04-20 13:13:36
【问题描述】:

我只是测量 a 方法的 cpu 时间,但它给了我不同的时间,为什么?

 for (int i = 0; i < 10; i++){
TimeSpan start = Process.GetCurrentProcess().UserProcessorTime;
testFunction(100000);
TimeSpan end = Process.GetCurrentProcess().UserProcessorTime;
Console.WriteLine(end-start);
}

【问题讨论】:

  • 它们有多大不同?
  • 由于 JIT (Just-In-Time) 编译器,您可以预期第一次会变慢,例如(1) 或 (2)。但正如@blind.wolf 所说——他们有多大的不同
  • 和以前一样的问题,那个定时器的分辨率不是很好。它仅精确到 +/- 0.016 秒。代码的运行速度通常比这快很多。请改用 Stopwatch 类。而且您必须多次运行测试,仅以测量的中位数作为粗略指示。并考虑使用分析器。
  • @HansPassant 如果我使用 StopWatch,我将无法仅计算 cpu 时间,但它也会给我在后台处理的时间,这会使我的价值出错
  • @WaiHaLee 结果是 904.8058 920.4059 920.4059 889.2057 904.8058 920.4059 920.4059 920.4059 920.4059 920.4059

标签: c# .net performance process measurement


【解决方案1】:

函数执行时间取决于很多因素:当前运行的进程数(可以在循环执行期间更改)、进程的优先级(据我所知也可以更改)、函数执行期间的操作系统中断, RAM(例如 RAM 页面错误)等。因此,如果执行时间不时有一点不同,这并不奇怪。

【讨论】:

  • 这就是为什么我使用 Process.GetCurrentProcess().UserProcessorTime 而不是 StopWatch 来计算 cpu 时间但问题仍然存在
  • @Omega 造成时间的主要因素是页面错误和缓存更新。这不能被擦除,因为当进程改变时缓存和页面经常被改变
猜你喜欢
  • 2014-05-20
  • 2014-03-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-12-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多