Saya baru saja mengalami beberapa perilaku tak terduga dengan DateTime.UtcNow saat melakukan beberapa pengujian unit. Tampaknya saat Anda memanggil DateTime.Now/UtcNow secara berurutan, tampaknya memberikan Anda nilai yang sama untuk interval waktu yang lebih lama dari yang diharapkan, daripada menangkap kenaikan milidetik yang lebih tepat.
Saya tahu ada kelas Stopwatch yang lebih cocok untuk melakukan pengukuran waktu yang tepat, tetapi saya ingin tahu apakah seseorang dapat menjelaskan perilaku ini di DateTime? Apakah ada presisi resmi yang didokumentasikan untuk DateTime.Now (misalnya, tepat dalam 50 md?)? Mengapa DateTime.Now dibuat kurang tepat daripada yang dapat ditangani oleh kebanyakan jam CPU? Mungkin itu hanya dirancang untuk CPU denominator umum terendah?
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();
}