系统时钟调整会影响C#中的秒表计时吗?

8
假设我的代码中正在运行一个名为Stopwatch的程序,然后在中途,另一个应用程序改变了系统时钟(我在服务器上安装了域时间同步每秒钟同步)。

这是否会影响秒表计时结果?

3个回答

9

这要视情况而定。

Stopwatch 仅在 Win32 QueryPerformanceCounter() 可用时使用,该实现对时间更改是容忍的。

如果高分辨率计数器不可用,Stopwatch 就会退回到系统计时器,基本上就是调用 DateTime.UtcNow.Ticks 。在这种不幸的情况下,Stopwatch 的结果将受到时间(而非时区)更改的影响。

正如在引用的 MSDN 文章中所述,您可以使用 IsHighResolution 字段检查高分辨率计数器是否可用。

您可以因为这个无法修复的缺陷而批评 .Net 团队 :)


QPC的使用(或不使用)的详细信息 - https://msdn.microsoft.com/zh-cn/library/windows/desktop/dn553408(v=vs.85).aspx - user2864740

6

1

不会影响它。

来自MSDN

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接