Acabei de ter um comportamento inesperado com DateTime.UtcNow ao fazer alguns testes de unidade. Parece que quando você chama DateTime.Now/UtcNow em rápida sucessão, parece devolver o mesmo valor por um intervalo de tempo mais longo do que o esperado, em vez de capturar incrementos de milissegundos mais precisos.
Eu sei que existe uma classe de Cronômetro que seria mais adequada para fazer medições de tempo precisas, mas estava curioso para saber se alguém poderia explicar esse comportamento em DateTime. Existe uma precisão oficial documentada para DateTime.Now (por exemplo, com precisão de 50 ms?)? Por que DateTime.Now seria menos preciso do que a maioria dos clocks da CPU poderia suportar? Talvez seja apenas projetado para o menor denominador comum da 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();
}