【发布时间】:2011-08-13 05:19:02
【问题描述】:
我曾经认为
-
Stopwatch.ElapsedTicks等于 -
Stopwatch.Elapsed.Ticks。
但事实并非如此。后者是 100 纳秒的周期数,而前者使用一个名为 timer ticks 的神秘单位。我想知道这些是什么,为什么它们与通常的度量单位不同?
【问题讨论】:
我曾经认为
Stopwatch.ElapsedTicks 等于 Stopwatch.Elapsed.Ticks。但事实并非如此。后者是 100 纳秒的周期数,而前者使用一个名为 timer ticks 的神秘单位。我想知道这些是什么,为什么它们与通常的度量单位不同?
【问题讨论】:
也许查看控制台输出会有所帮助...
LinkedList 500 插入/删除操作 ElapsedTicks : 45871
LinkedList 500 插入/删除操作 Elapsed.ticks : 141266
LinkedList 500 插入/删除操作毫秒:14.1266
列出 500 个插入/删除操作 ElapsedTicks:1235121
列出 500 个插入/删除操作 Elapsed.ticks : 3803744
列出 500 个插入/删除操作 milisec: 380.3744
(据此确认 Elapsed.Ticks 的测量时间为 100 纳秒)
【讨论】:
Stopwatch.ElapsedTicks 以秒表的形式测量“滴答”,即 1 秒/Stopwatch.Frequency 的时间长度。
在内部,这是基于Windows High Performance Counter Support(如果您的系统支持,这几乎总是正确的)。本机调用是QueryPerformanceFrequency,其长度会根据您的硬件支持而有所不同。
【讨论】:
来自the docs:
秒表通过计算底层计时器机制中的计时器滴答来测量经过的时间。如果安装的硬件和操作系统支持高分辨率性能计数器,则 Stopwatch 类使用该计数器来测量经过的时间。否则, Stopwatch 类使用系统计时器来测量经过的时间。使用Frequency 和IsHighResolution 字段来确定秒表计时实现的精度和分辨率。
是的,“滴答声”被重载表示两种不同的东西是一种痛苦:(
我认为这基本上是因为Stopwatch 提供了一个非常“原始”的性能计数器视图,对于“tick”的含义,它可以有不同的实现。
【讨论】: