问题 什么是计时器滴答,秒表使用的单位.ElapsedTicks


我曾经这么认为

  • Stopwatch.ElapsedTicks 等于
  • Stopwatch.Elapsed.Ticks

但事实并非如此。虽然后者是100纳秒的时期,但前者使用了一个神秘的单位 timer ticks。我想知道它们是什么,为什么它们与通常的测量单位不同?


5257
2018-04-26 17:03


起源



答案:


文档

秒表通过计算基础计时器机制中的计时器滴答来测量经过的时间。如果安装的硬件和操作系统支持高分辨率性能计数器,则Stopwatch类使用该计数器来测量经过的时间。否则,Stopwatch类使用系统计时器来测量经过的时间。使用 频率 和 IsHighResolution 用于确定秒表计时实施的精度和分辨率的字段。

是的,这是一个痛苦,“滴答”被重载意味着两个不同的东西:(

我认为这基本上是因为 Stopwatch 给出了一个非常“原始”的性能计数器视图,它可以通过“tick”实现不同的实现。


9
2018-04-26 17:05



我该如何转换? Stopwatch 滴答作响 TimeSpan 然后,或者我应该从不同的领域获得它?我确实需要它。 - Shimmy
@Shimmy:你可以使用 Elapsed 属性... - Jon Skeet
这就是我最终做的事情。非常感谢。 - Shimmy


答案:


文档

秒表通过计算基础计时器机制中的计时器滴答来测量经过的时间。如果安装的硬件和操作系统支持高分辨率性能计数器,则Stopwatch类使用该计数器来测量经过的时间。否则,Stopwatch类使用系统计时器来测量经过的时间。使用 频率 和 IsHighResolution 用于确定秒表计时实施的精度和分辨率的字段。

是的,这是一个痛苦,“滴答”被重载意味着两个不同的东西:(

我认为这基本上是因为 Stopwatch 给出了一个非常“原始”的性能计数器视图,它可以通过“tick”实现不同的实现。


9
2018-04-26 17:05



我该如何转换? Stopwatch 滴答作响 TimeSpan 然后,或者我应该从不同的领域获得它?我确实需要它。 - Shimmy
@Shimmy:你可以使用 Elapsed 属性... - Jon Skeet
这就是我最终做的事情。非常感谢。 - Shimmy


Stopwatch.ElapsedTicks 根据秒表测量“滴答”,这是1秒的时间长度/Stopwatch.Frequency

在内部,这是基于 Windows高性能计数器支持 (如果您的系统支持,几乎总是如此)。原生电话是 QueryPerformanceFrequency的,根据硬件的支持,长度会有所不同。


4
2018-04-26 17:06





也许看到控制台输出有帮助...

LinkedList 500插入/删除操作ElapsedTicks:45871
LinkedList 500插入/删除操作Elapsed.ticks:141266
LinkedList 500插入/删除操作milisec:14.1266
列出500插入/删除操作ElapsedTicks:1235121
列出500插入/删除操作Elapsed.ticks:3803744
列出500插入/移除操作milisec:380.3744

(从中确认Elapsed.Ticks在100纳秒内测量)


0
2018-05-04 10:27