假设我Stopwatch
在我的代码中运行,在中间,其他一些应用程序改变了系统时钟(我的服务器上的域时间每秒同步一次)。
会影响秒表结果吗?
假设我Stopwatch
在我的代码中运行,在中间,其他一些应用程序改变了系统时钟(我的服务器上的域时间每秒同步一次)。
会影响秒表结果吗?
这取决于。
Stopwatch
仅当 Win32 QueryPerformanceCounter()可用 时才依赖它。此实现具有时变容错性。
如果高分辨率计数器不可用,则Stopwatch
回退到系统计时器,基本上是DateTime.UtcNow.Ticks
调用。在这种不幸的情况下Stopwatch
,结果将受到时间(不是时区)变化的影响。
正如引用的 MSDN 文章中所写,您可以使用字段检查高分辨率计数器是否可用IsHighResolution
。
你可以责怪.Net团队使用这个不会修复缺陷:)
不,Stopwatch 内部依赖于 Win32 QueryPerformanceCounter(),它与系统时钟无关。
不,它不会影响它。
来自MSDN:
秒表通过计算底层计时器机制中的计时器滴答来测量经过的时间。如果安装的硬件和操作系统支持高分辨率性能计数器,则 Stopwatch 类使用该计数器来测量经过的时间。否则, Stopwatch 类使用系统计时器来测量经过的时间。使用频率和 IsHighResolution 字段来确定秒表计时实现的精度和分辨率。