我正在尝试使用C#StopWatch函数对一系列算法进行基准测试,使用:
var timer = Stopwatch.StartNew();
// Do something
timer.Stop();
var elapsed2 = timer.ElapsedTicks;
Console.WriteLine(elapsed2);
我的问题是这些蜱真正与之相关。即是这些时钟周期。我知道我可以从Stopwatch.Frequency
获得频率,但这实际上与时钟周期相同。即滴答计数553534对应于多个CPU周期。
答案 0 :(得分:4)
来自docs
请注意
秒表刻度与DateTime.Ticks不同。 DateTime.Ticks值中的每个刻度表示一个100纳秒的间隔。 ElapsedTicks值中的每个刻度表示等于1秒的时间间隔除以Frequency。
频率:
定时器频率表示定时器精度和分辨率。例如,每秒200万个滴答的定时器频率等于每个滴答500纳秒的定时器分辨率。换句话说,因为一秒钟等于10亿纳秒,每秒200万个滴答的定时器频率相当于每10亿纳秒200万个滴答,可以进一步简化为每500纳秒1个滴答。
频率值取决于基础计时机制的分辨率。如果安装的硬件和操作系统支持高分辨率性能计数器,则Frequency值反映该计数器的频率。否则,频率值取决于系统定时器频率。
由于秒表频率取决于安装的硬件和操作系统,因此在系统运行时频率值保持不变。
答案 1 :(得分:3)
这取决于系统的功能。
IsHighResolution
field可以告诉你Stopwatch
课如何讲述时间。如果它是true
,那么它使用性能计数器,并且滴答可能是时钟周期。他们实际代表的是依赖于硬件。