Я просто столкнулся с каким-то неожиданным поведением с DateTime.UtcNow, выполняя некоторые модульные тесты. Похоже, что когда вы вызываете DateTime.Now/UtcNow с быстрой последовательностью, похоже, вы возвращаете то же значение для более длительного, чем ожидалось, времени, а не для получения более точных миллисекундных приращений.
Я знаю, что есть класс секундомера, который лучше подходит для выполнения точных измерений времени, но мне было любопытно, может ли кто-нибудь объяснить это поведение в DateTime? Есть ли официальная точность, документированная для DateTime.Now(например, с точностью до 50 мкс?)? Почему DateTime.Now будет менее точной, чем то, что может обрабатывать большинство процессорных часов? Может быть, он просто предназначен для самого низкого общего процессора знаменателей?
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();
}