是日期时间.现在,在不同时间的不同进程中调用时总是单调的

本文关键字:调用 单调 进程 同时间 时间 日期 现在 | 更新日期: 2023-09-27 18:18:21

假设我在一个进程中执行DateTime.UtcNow,一段时间后我在另一个进程中执行DateTime.UtcNow(甚至是另一个exe文件(。

我是否保证第一次调用将返回"较小"或等于第二个调用的DateTime值,也就是说,即使调用几乎同时进行(即调用之间的差异为 1 毫秒甚至更小(,也不会发生第一个调用比第二个调用"大"的情况?

假设计算机时间在这些调用之间从未以任何方式更改(例如,禁用了 Windows 时间服务(。

是日期时间.现在,在不同时间的不同进程中调用时总是单调的

是和否

DateTime.Now这样的功能依赖于硬件提供的计时器和时钟,并通过操作系统公开。 这些计时器和时钟的可靠性完全取决于平台。 话虽如此,我从未听说过时钟似乎像您描述的那样向后移动的情况。

可能有更好的时钟

如果您迫切需要高度可靠、高分辨率的计时机制,System.DateTime.NowSystem.DateTime.UtcNow不一定是最好的资源。 Win32 API 公开更精确的"多媒体"计时器和计数器(例如,5-10 毫秒分辨率与 50 毫秒(。 下面是使用 win32 高分辨率计时器的类的示例。

一般来说,是的,时间只会向前移动,所以你可以相信——假设环境稳定——一个DateTime.Now/DateTime.UtcNow总是比在此之前的大。

但是,您应该避免过分依赖这一点。有些事情可能会打破这个假设。对于本地时间,您需要小心 DST,但即使使用通用时间,也可能有一些事情会影响您。您可能很不幸地到达时间与服务器同步的确切时刻,并通过倒退两秒钟来纠正自己。这不太可能,但仍然有可能。