Zrobiłem małą aplikację testową w języku C#, która ustawia DateTime.Now
i rozpoczyna StopWatch
. Co dziesięć sekund drukuję _stopwatch.Elapsed.TotalMilliseconds
i (DateTime.Now - _startTime).TotalMilliseconds
.Dlaczego drift DateTime.Now i StopWatch?
Chociaż nie oczekuję, że te dwa elementy będą identyczne, byłem zaskoczony widząc ich rozbieżność liniową o około jedną milisekundę na 20 sekund. Zakładam, że DateTime.Now
dzwoni do zegara systemowego, podczas gdy StopWatch
robi jakiś rodzaj akumulacji?
Przykładowe wyjście:
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
Pełna źródło: https://gist.github.com/knatten/86529563122a342de6bb
wyjściowa: https://gist.github.com/knatten/84f9be9019ee63119ee2
myśleć o tym ... nie można nazwać ich obu w tej samej linii w dokładnie tym samym czasie ... tak tak, w swoim zegarem, czas potrzebny do wydrukuj informacje dla datetime, a następnie wydrukować informacje dla StopWatch, niezależnie od tego, jak blisko są połączenia (jeden po drugim), w ciągu 20 sekund, pokaże względnie małą różnicę (1 ms) ... – MaxOvrdrv
@MaxOvrdrv Chociaż może to być dla początkowej różnicy nie spowodowałaby zgodnego dryfu, jak określono w PO. – Ashigore
@Ashigore masz rację ... to powinna być ta sama różnica widoczna na wszystkich wydrukach ... nie wiem wtedy ... może jego wewnętrzna bateria zegara jest na wyczerpaniu? ;) – MaxOvrdrv