Tôi đã thực hiện một ứng dụng thử nghiệm nhỏ trong C# đặt DateTime.Now
và bắt đầu một StopWatch
. Cứ mười giây một lần tôi in _stopwatch.Elapsed.TotalMilliseconds
và (DateTime.Now - _startTime).TotalMilliseconds
.Tại sao DateTime.Now và StopWatch trôi dạt?
Trong khi tôi không mong đợi hai giống hệt nhau, tôi đã ngạc nhiên khi thấy chúng phân kỳ tuyến tính khoảng một phần nghìn giây mỗi 20 giây. Tôi giả sử DateTime.Now
gọi đồng hồ hệ thống, trong khi StopWatch
thực hiện một số loại tích lũy nào?
Mẫu đầu ra:
StopWatch : 0,2 DateTime : 1,0 Diff : 0,81
StopWatch : 10000,5 DateTime : 10002,6 Diff : 2,04
(...)
StopWatch : 2231807,5 DateTime : 2231947,7 Diff : 140,13
StopWatch : 2241809,5 DateTime : 2241950,2 Diff : 140,70
Full source: https://gist.github.com/knatten/86529563122a342de6bb
Output: https://gist.github.com/knatten/84f9be9019ee63119ee2
suy nghĩ về nó ... bạn không thể gọi họ là cả hai trên cùng một dòng ở chính xác cùng một thời điểm ... do đó, vâng, trong giờ của bạn, thời gian cần thiết để in thông tin cho datetime, và THEN in thông tin cho StopWatch, bất kể chúng gần như thế nào (ngay sau cái kia), trên 20 giây, sẽ hiển thị một sự khác biệt tương đối nhỏ (1ms) ... – MaxOvrdrv
@MaxOvrdrv Trong khi điều này có thể giải thích cho một sự khác biệt ban đầu, nó sẽ không gây ra trôi dạt phù hợp như quy định trong OP. – Ashigore
@Ashigore bạn đang phải ... nó phải là sự khác biệt cùng nhìn thấy trong tất cả các bản in ... tôi không biết sau đó ... có thể pin đồng hồ nội bộ của mình đang chạy thấp trên điện? ;) – MaxOvrdrv