Khi sử dụng Stopwatch.GetTimestamp(), chúng tôi thấy rằng nếu bạn ghi lại giá trị trả về và sau đó tiếp tục gọi nó và so sánh với giá trị trả về trước đó, cuối cùng sẽ không thể trả về giá trị nhỏ hơn giá trị ban đầu.Does Stopwatch.Gettimestamp có bao giờ vượt qua? Hay quay trở lại?
Hành vi này có được mong đợi không?
Mục đích của việc này trong mã sản xuất là có thời gian sytem chính xác đến một micro giây.
Kỹ thuật này liên quan đến việc gọi DateTime.UtcNow và cũng gọi hàm Stopwatch.GetTimestamp() dưới dạng originalUtcNow và originalTimestamp tương ứng.
Từ thời điểm đó trở đi, ứng dụng chỉ cần gọi Stopwatch.GetTimestamp() và sử dụng Stopwatch.Frequency nó tính toán sự khác biệt từ biến originalTimestamp và sau đó thêm sự khác biệt đó vào originalUtcNow.
Sau đó, Thì đấy ... một micro giây hiệu quả và chính xác DateTime.
Nhưng, chúng tôi thấy rằng đôi khi đồng hồ bấm giờ.GetTimestamp() sẽ trả lại số thấp hơn.
Điều đó xảy ra khá hiếm khi. Suy nghĩ của chúng tôi là chỉ cần "đặt lại" khi điều đó xảy ra và tiếp tục.
TUY NHIÊN, điều này khiến chúng tôi nghi ngờ tính chính xác của Stopwatch.GetTimestamp() hoặc nghi ngờ có lỗi trong thư viện .Net.
Nếu bạn có thể làm sáng tỏ điều này, vui lòng thực hiện.
FYI, dựa trên giá trị dấu thời gian hiện tại, tần suất và độ dài.MaxValue dường như không chắc sẽ cuộn qua trong suốt cuộc đời trừ khi đó là vấn đề phần cứng.
EDIT: Chúng tôi hiện đang tính toán giá trị này "cho mỗi chuỗi" và sau đó "kẹp" để xem các bước nhảy giữa các lõi để đặt lại.
Làm thế nào bạn có thể có một "micro giây thời gian sytem chính xác "khi' UtcNow' không phải là micro giây chính xác? Số này chỉ có thể được sử dụng cho các khoảng thời gian chính xác. – Groo
Xin lỗi. Bạn đã đọc lời giải thích của tôi chưa? Nó chỉ gọi UtcNow một lần khi bắt đầu ứng dụng. Từ thời điểm đó, nó sử dụng đồng hồ hệ thống và tính toán sự khác biệt để có được thời gian hiện tại. – Wayne
Đồng hồ bấm giờ sử dụng bộ hẹn giờ có độ phân giải cao khi có quyền truy cập vào chúng hoặc chúng tồn tại trên máy tính. –