Tôi vừa gặp phải một số hành vi không mong muốn với DateTime.UtcNow trong khi thực hiện một số bài kiểm tra đơn vị. Có vẻ như khi bạn gọi DateTime.Now/UtcNow liên tục, nó dường như trả lại cho bạn cùng một giá trị trong một khoảng thời gian dài hơn mong đợi, thay vì ghi lại các gia số mili giây chính xác hơn.
Tôi biết có một lớp Đồng hồ bấm giờ sẽ phù hợp hơn để thực hiện các phép đo thời gian chính xác, nhưng tôi tò mò liệu ai đó có thể giải thích hành vi này trong DateTime không? Có độ chính xác chính thức được ghi lại cho DateTime.Now không (ví dụ: chính xác trong vòng 50 mili giây?)? Tại sao DateTime.Now lại được tạo ra kém chính xác hơn những gì mà hầu hết các đồng hồ CPU có thể xử lý? Có lẽ nó chỉ được thiết kế cho CPU có mẫu số chung thấp nhất?
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();
}