ฉันเพิ่งพบพฤติกรรมที่ไม่คาดคิดบางอย่างกับ DateTime.UtcNow ขณะทำการทดสอบหน่วย ดูเหมือนว่าเมื่อคุณเรียก DateTime.Now/UtcNow อย่างต่อเนื่องดูเหมือนว่าจะให้ค่าเดิมกลับมาเป็นช่วงเวลาที่นานกว่าที่คาดไว้แทนที่จะจับภาพทีละมิลลิวินาทีที่แม่นยำยิ่งขึ้น
ฉันรู้ว่ามีคลาสนาฬิกาจับเวลาที่เหมาะกว่าสำหรับการวัดเวลาที่แม่นยำ แต่ฉันอยากรู้ว่ามีใครสามารถอธิบายพฤติกรรมนี้ใน DateTime ได้หรือไม่? มีเอกสารความแม่นยำอย่างเป็นทางการสำหรับ DateTime หรือไม่ตอนนี้ (ตัวอย่างเช่นแม่นยำภายใน 50 ms?) เหตุใด DateTime.Now จึงมีความแม่นยำน้อยกว่าที่นาฬิกา CPU ส่วนใหญ่สามารถจัดการได้ อาจจะออกแบบมาสำหรับ 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();
}