4

Stopwatch对于我用于性能测量的一些私人项目。

但是,在我想测量的呼叫重复计数较低时,我最终得到 0 ElapsedMilliseconds,这使得计算平均值变得困难。

我想写我自己的秒表类。它可以用刻度计算并ElapsedMicroseconds基于Stopwatch.ElapsedTicks和给出一个模糊的值TimeSpan.TicksPerMillisecond。这可能不是一个很好的方法。

我绝对需要由 winapi 的高性能计数器支持的东西,所以 datetime 等是不够的。

还有其他想法吗?

4

4 回答 4

6

如果你得到 0 ElapsedMicroseconds,这意味着间隔小于 1 毫秒。您可以尝试在刻度中测量周期并使用频率:

  Stopwatch watch = Stopwatch.StartNew();
  ...
  // Estimated code here 
  ...
  watch.Stop();

  // Microseconds
  int microSeconds = (int)(watch.ElapsedTicks * 1.0e6 / Stopwatch.Frequency + 0.4999);
  // Nanoseconds (estimation)
  int nanoSeconds = (int)(watch.ElapsedTicks * 1.0e9 / Stopwatch.Frequency + 0.4999);
于 2013-07-19T11:20:20.967 回答
1

秒表是您需要的东西。采用:

double diffMs = (stopWatch.ElapsedTicks * 1000.0) / Stopwatch.Frequency;

StopWathch.ElapsedMilliseconds 定义为 long。因此,它不可能比一毫秒更精确。

于 2013-07-19T11:23:08.827 回答
1

C# 时间(以微秒为单位)

long microseconds = ticks / (TimeSpan.TicksPerMillisecond / 1000);
于 2013-07-19T11:23:35.043 回答
1

原谅我的无知,(但是)如果它小于一毫秒(1000 滴答声),你肯定不必诊断它的性能问题

于 2013-07-19T11:32:06.520 回答