假设我的代码中正在运行一个名为
Stopwatch
的程序,然后在中途,另一个应用程序改变了系统时钟(我在服务器上安装了域时间同步每秒钟同步)。
这是否会影响秒表计时结果?
Stopwatch
的程序,然后在中途,另一个应用程序改变了系统时钟(我在服务器上安装了域时间同步每秒钟同步)。
这是否会影响秒表计时结果?
这要视情况而定。
Stopwatch
仅在 Win32 QueryPerformanceCounter() 可用时使用,该实现对时间更改是容忍的。
如果高分辨率计数器不可用,Stopwatch
就会退回到系统计时器,基本上就是调用 DateTime.UtcNow.Ticks
。在这种不幸的情况下,Stopwatch
的结果将受到时间(而非时区)更改的影响。
正如在引用的 MSDN 文章中所述,您可以使用 IsHighResolution
字段检查高分辨率计数器是否可用。
您可以因为这个无法修复的缺陷而批评 .Net 团队 :)
不会影响它。
来自MSDN:
秒表通过计算底层计时器机制中的计时器滴答声来测量经过的时间。如果安装的硬件和操作系统支持高分辨率性能计数器,则 Stopwatch 类使用该计数器来测量经过的时间。否则,Stopwatch 类使用系统计时器来测量经过的时间。使用 Frequency 和 IsHighResolution 字段来确定 Stopwatch 计时实现的精度和分辨率。