【发布时间】:2011-01-09 17:33:42
【问题描述】:
我刚刚在进行一些单元测试时遇到了 DateTime.UtcNow 的一些意外行为。看来,当您快速连续调用 DateTime.Now/UtcNow 时,它似乎会在比预期更长的时间间隔内返回相同的值,而不是捕获更精确的毫秒增量。
我知道有一个更适合进行精确时间测量的 Stopwatch 类,但我很好奇是否有人可以在 DateTime 中解释这种行为?是否记录了 DateTime.Now 的官方精度(例如,精确到 50 毫秒?)?为什么 DateTime.Now 的精度低于大多数 CPU 时钟可以处理的精度?也许它只是为最低公分母 CPU 设计的?
public static void Main(string[] args)
{
var stopwatch = new Stopwatch();
stopwatch.Start();
for (int i=0; i<1000; i++)
{
var now = DateTime.Now;
Console.WriteLine(string.Format(
"Ticks: {0}\tMilliseconds: {1}", now.Ticks, now.Millisecond));
}
stopwatch.Stop();
Console.WriteLine("Stopwatch.ElapsedMilliseconds: {0}",
stopwatch.ElapsedMilliseconds);
Console.ReadLine();
}
【问题讨论】:
-
你得到相同值的时间间隔是多少?
-
当我运行上面的代码时,我只得到了 3 个唯一的刻度和毫秒值,最后的秒表时间是 147 毫秒,所以在我的机器上它似乎只精确到 50 毫秒左右。 ..
-
我应该说,循环运行了很多次,但我只看到了 3 个不同的值...
-
对于任何来这里的人,这里是 TL;DR// 使用 QueryPerformanceCounter 函数“检索性能计数器的当前值,这是一个可以使用的高分辨率(msdn.microsoft.com/en-us/library/windows/desktop/…
标签: c# .net datetime precision time-precision