对于一些私人项目,我使用Stopwatch
来衡量性能。
但在我想测量的呼叫的重复次数较低时,我最终得到0个ElapsedMilliseconds
,这使得难以计算平均值。
我想过写我自己的秒表课。它可以用ticks进行计算,并在Stopwatch.ElapsedTicks
和TimeSpan.TicksPerMillisecond
的基础上给出一个模糊的ElapsedMicroseconds
。这可能不是一个很好的方式。
我确实需要一些由winapi的高性能计数器备份的东西,所以约会时间之类的是不够的。
还有其他想法吗?
如果获得0 ElapsedMicroseconds,则表示间隔短于1ms。您可以尝试在Ticks中测量周期,并使用Frequency:
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);
StopWatch就是您所需要的。用途:
double diffMs = (stopWatch.ElapsedTicks * 1000.0) / Stopwatch.Frequency;
StopWathch.ElapsedMilliseconds定义为长。因此,它不可能比一毫秒更精确。
C#时间(以微秒为单位)
long microseconds = ticks / (TimeSpan.TicksPerMillisecond / 1000);
请原谅我的无知,(但是)如果它小于一毫秒(1000个刻度),您肯定不必诊断它的性能问题