Me encontré con un comportamiento inesperado con DateTime.UtcNow mientras hacía algunas pruebas unitarias. Parece que cuando llama a DateTime.Now/UtcNow en rápida sucesión, parece devolverle el mismo valor durante un intervalo de tiempo más largo de lo esperado, en lugar de capturar incrementos de milisegundos más precisos.
Sé que hay una clase de cronómetro que sería más adecuada para realizar mediciones de tiempo precisas, pero tenía curiosidad por saber si alguien podría explicar este comportamiento en DateTime. ¿Existe una precisión oficial documentada para DateTime.Now (por ejemplo, con una precisión de 50 ms?)? ¿Por qué DateTime.Now sería menos preciso de lo que podrían manejar la mayoría de los relojes de CPU? ¿Quizás solo está diseñado para la CPU con el mínimo común denominador?
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();
}