我在C#中做了一個小測試應用程序,它設置DateTime.Now
並啓動一個StopWatch
。每十秒打印一次_stopwatch.Elapsed.TotalMilliseconds
和(DateTime.Now - _startTime).TotalMilliseconds
。爲什麼DateTime.Now和StopWatch漂移?
雖然我不認爲兩者是相同的,但我驚訝地發現它們每20秒會線性地發散大約1毫秒。我假設DateTime.Now
調用系統時鐘,而StopWatch
做一些積累?
輸出示例:
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
完整的源:https://gist.github.com/knatten/86529563122a342de6bb
輸出:https://gist.github.com/knatten/84f9be9019ee63119ee2
想想看......你不能在完全相同的時間打電話給他們都在同一行...所以,是的,你的計時器內,所花費的時間打印日期時間的信息,然後THEN打印秒錶的信息,無論他們是多麼接近他們(一個接一個地),超過20秒,將顯示相對較小的差異(1毫秒)... – MaxOvrdrv
@MaxOvrdrv雖然這可能會帳戶對於最初的差異,它不會導致OP中規定的一致漂移。 – Ashigore
@Ashigore你是對的......它應該是在所有打印輸出中看到的差異......我不知道......也許他的內部時鐘電池電量不足? ;) – MaxOvrdrv