假设我在一个方法中两次调用DateTime.UtcNow
之间有一个简单的数学循环。
如果之间的代码花费的时间超过了系统的计时器分辨率(例如10毫秒),DateTime.UtcNow
是否在同一方法内返回两个不同的值?
通过扩展,是否有可能,如果代码在日期变为新日期的那一刻正确运行,那么DateTime.UtcNow.Date
会在同一方法内导致两个不同的日期吗?
最佳答案
为什么不进行实验?
DateTime t1 = DateTime.UtcNow;
while (true) {
DateTime t2 = DateTime.UtcNow;
if (t2 != t1) {
Console.Write($"{(t2 - t1).TotalMilliseconds}");
break;
}
}
结果:
1.0001
因此,在我的工作站上,
DateTime.UtcNow
的分辨率为1毫秒。如果该方法需要10毫秒才能完成,则DateTime.UtcNow
将明确返回不同的值: DateTime t1 = DateTime.UtcNow;
// 10 ms routine here
DoSomething();
// t1 != t2; t2 ~ t1.AddMilliseconds(10)
DateTime t2 = DateTime.UtcNow;
有些PC没有High Resilution Timer Stopwatch.IsHighResolution的可能性很小。在这种情况下,分辨率下降到
3600 / 65536 * 1000 =
55毫秒(系统计时器分辨率-65536
每小时滴答),并且t1
和t2
很有可能会相同关于c# - DateTime.UtcNow是否将在同一方法中返回不同的值?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/44393542/