Loading

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

posted @ 2021-11-17 15:07  J.晒太阳的猫  阅读(264)  评论(0编辑  收藏  举报