.NET 中的计时 tick 是多长?
.NET 的代码中,以下两处都与时间 tick 相关。
var ticksPerSecondOfTimeSpan = TimeSpan.TicksPerSecond;
var ticksPerSecondOfStopWatch = Stopwatch.Frequency;
在数字上,Win10即以上的系统,这两个是一样的(都是 10 000 000,即 1 tick = 100 ns)。
Win7即以下的系统就不一定了。
从源码上,这两个数据的获取是不一样。
TimeSpan
TimeSpan 相关的数值,在源码上是写死的常量
TimeSpan.TicksPerSecond Field (System) | Microsoft Docs
TicksPerMillisecond
Stopwatch
Stopwatch 的 Frequency 与硬件的计时器相关。
Stopwatch.Frequency Field (System.Diagnostics) | Microsoft Docs
Frequency
Why does QueryPerformanceFrequency() use a different timer in each Windows version...?
QueryPerformanceFrequency returning 10mhz bug | Handmade Network
Acquiring high-resolution time stamps - Win32 apps | Microsoft Docs
最佳实践
具体写代码时,建议看相关数据的上下文。
如果是和 TimeSpan 相关,则使用 TimeSpan 中的 tick 数据。
如果是和 Stopwatch 相关,则使用 Stopwatch 中的 tick 数据。
作者:
J.晒太阳的猫
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文链接,否则保留追究法律责任的权利。