Ich habe gerade ein unerwartetes Verhalten mit DateTime.UtcNow festgestellt, als ich einige Unit-Tests durchgeführt habe. Wenn Sie DateTime.Now/UtcNow schnell hintereinander aufrufen, erhalten Sie anscheinend den gleichen Wert für ein länger als erwartetes Zeitintervall zurück, anstatt genauere Millisekunden-Inkremente zu erfassen.
Ich weiß, dass es eine Stoppuhrklasse gibt, die sich besser für präzise Zeitmessungen eignet, aber ich war neugierig, ob jemand dieses Verhalten in DateTime erklären könnte. Gibt es eine offizielle Genauigkeit, die für DateTime.Now dokumentiert ist (z. B. auf 50 ms genau?)? Warum sollte DateTime.Now weniger präzise sein als die meisten CPU-Uhren? Vielleicht ist es nur für die CPU mit dem kleinsten gemeinsamen Nenner ausgelegt?
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();
}