Ich habe eine kleine Testanwendung in C# gemacht, die DateTime.Now
setzt und eine StopWatch
startet. Alle zehn Sekunden drucke ich und (DateTime.Now - _startTime).TotalMilliseconds
.Warum driften DateTime.Now und StopWatch?
Während ich nicht erwarte, dass die beiden identisch sind, war ich überrascht, dass sie linear um etwa eine Millisekunde pro 20 Sekunden divergieren. Ich nehme an, DateTime.Now
ruft die Systemuhr, während die StopWatch
eine Art von Akkumulation tut?
Beispielausgabe:
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
Voll Quelle: https://gist.github.com/knatten/86529563122a342de6bb
Ausgang: https://gist.github.com/knatten/84f9be9019ee63119ee2
darüber nachdenkt ... Sie können sie beide auf der gleichen Linie an genau der gleichen Zeit nicht nennen ... also ja, in Ihrem Timer, nimmt die Zeit, die zum Drucken Informationen für datetime, und DANN drucken die Informationen für StopWatch, unabhängig davon, wie nahe sie sind (einer nach dem anderen), über 20 Sekunden, zeigt eine relativ kleine Differenz (1 ms) ... – MaxOvrdrv
@MaxOvrdrv Während dies möglicherweise Konto für einen anfänglichen Unterschied würde es keine konsistente Drift wie im OP angegeben verursachen. – Ashigore
@Ashigore du hast Recht ... es sollte der gleiche Unterschied sein, der in allen Ausdrucken zu sehen ist ... ich weiß es nicht ... vielleicht ist seine interne Uhrbatterie schwach geworden? ;) – MaxOvrdrv