Skip to content

.NET 中的计时 tick 是多长?

Published: at 15:07

.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 数据。


原文链接: https://blog.jgrass.cc/posts/how-long-dotnet-tick/

本作品采用 「署名 4.0 国际」 许可协议进行许可,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文链接。