Ho appena riscontrato un comportamento imprevisto con DateTime.UtcNow mentre eseguivo alcuni test unitari. Sembra che quando chiami DateTime.Now/UtcNow in rapida successione, sembra che ti restituisca lo stesso valore per un intervallo di tempo più lungo del previsto, piuttosto che acquisire incrementi di millisecondi più precisi.
So che esiste una classe Stopwatch che sarebbe più adatta per eseguire misurazioni del tempo precise, ma ero curioso se qualcuno potesse spiegare questo comportamento in DateTime? Esiste una precisione ufficiale documentata per DateTime.Now (ad esempio, precisa entro 50 ms?)? Perché DateTime.Now dovrebbe essere reso meno preciso di quello che la maggior parte dei clock della CPU potrebbe gestire? Forse è progettato solo per la CPU con il minimo comune denominatore?
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();
}