Ho appena eseguito un comportamento imprevisto con DateTime.UtcNow mentre eseguivo alcuni test unitari. Sembra che quando si chiama DateTime.Now/UtcNow in rapida successione, sembra che si restituisca lo stesso valore per un intervallo di tempo più lungo del previsto, invece di acquisire incrementi di millisecondo più precisi.C# DateTime.Ora precisione
So che esiste una classe di cronometro che sarebbe più adatta per eseguire misurazioni precise del tempo, ma ero curioso se qualcuno potesse spiegare questo comportamento in DateTime? Esiste una precisione ufficiale documentata per DateTime.Ora (ad esempio, precisa entro 50 ms?)? Perché DateTime.Ora sarà reso meno preciso di quello che potrebbe gestire la maggior parte degli orologi della CPU? Forse è solo progettato per il minimo comune denominatore della 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();
}
Qual è l'intervallo durante il quale si ottiene indietro lo stesso valore? – ChrisF
Leggi http://stackoverflow.com/questions/307582/how-frequent-is-datetime-now-updated-or-is-there-a-more-precise-api-to-get-the –
Quando ho eseguito il sopra codice, ho ottenuto solo 3 valori unici per tick e millisecondi, e il tempo di cronometro finale era di 147 ms, quindi sembra che sulla mia macchina è solo preciso a circa 50ms ... –