在执行一些单元测试时,我只是遇到了DateTime.UtcNow一些意外的行为。看来,当您快速连续调用DateTime.Now/UtcNow时,似乎可以在比预期更长的时间间隔内返回相同的值,而不是捕获更精确的毫秒增量。
我知道有一个秒表类更适合进行精确的时间测量,但是我很好奇是否有人可以在DateTime中解释这种行为?是否有记录DateTime.Now的官方精度(例如,精度在50毫秒内?)?为什么将DateTime.Now设置为比大多数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();
}