Bazı birim testleri yaparken DateTime.UtcNow ile bazı beklenmedik davranışlarla karşılaştım. Art arda DateTime.Now/UtcNow'u aradığınızda, daha kesin milisaniye artışları yakalamak yerine, beklenenden daha uzun bir zaman aralığı için aynı değeri size geri veriyor gibi görünüyor.
Kesin zaman ölçümleri yapmak için daha uygun bir Kronometre sınıfı olduğunu biliyorum, ancak birinin bu davranışı DateTime'da açıklayıp açıklayamayacağını merak ediyordum. DateTime.Now için belgelenmiş resmi bir kesinlik var mı (örneğin, 50 ms içinde kesin mi?)? Neden DateTime.Now çoğu CPU saatinin kaldırabileceğinden daha az hassas hale getirilsin? Belki de en düşük ortak payda CPU için tasarlanmıştır?
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();
}