Präzise Zeit in .NET
Frage
Ich brauche Zugriff auf eine sehr genaues Timing in einer .NET-Anwendung.
ich brauche mikrosekundengenau.
Gibt es eine einfache Möglichkeit, dies zu tun in .NET?
Lösung
Die Stopwatch
Klasse ist die beste Präzision dass man bekommen kann, verwendet es die Hochfrequenz-Timer.
Die Frequenz der Stoppuhr hängt von der Frequenz der CPU, aber die in der Regel in die Millionen mal pro Sekunde Bereich.
Wenn die CPU nicht Hochfrequenz-Timer zur Verfügung stellen, dann wird die Klasse System-Timer-Rückfall, die im Bereich von 100 bis 50 mal pro Sekunde.
Andere Tipps
System.Diagnostics.Stopwatch ist die richtige Klasse für diesen Grad an Granularität in Ihrem Timing, aber stellen Sie sicher, dass Sie verwenden, um Ihr Stoppuhr Objekt Elapsed.Ticks
Eigenschaft statt der ElapsedTicks
Eigenschaft, wie sie sind zwei verschiedene Dinge.
ElapsedTicks
(ohne Punkt ) bezieht sich auf die Anzahl der Ticks der Stoppuhr, und muss daher mitStopwatch.Frequency
(die auf allen Maschinen nicht das gleiche ist), um die verstrichene Zeit zu berechnen.Elapsed.Ticks
( mit der Punkt), die Anzahl derTimespan
Zecken gibt, und ist auf der Stoppuhr Frequenz abhängig.
Dies ist wahrscheinlich einer der subtilsten Potential Fehler in .Net.
Auch hüte dich, dass Stoppuhr is hochgranulare, aber es ist nicht unbedingt alles, was genau (je nach Definition des Begriffs). Die verstrichene Zeit von Stoppuhr zurück wird dazu neigen, von der Systemzeit driften weg.
Auf meinem Laptop, Stoppuhr läuft knapp 5 Sekunden vor mehr als 24 Stunden, und dieser Effekt ist noch schlimmer auf einigen anderen Maschinen.
Wenn Sie Timing kurze Zeit, natürlich, dieser Effekt sollte nicht viel überhaupt.
Mit der Stoppuhr Klasse, tun sollten der Trick.
Die Stoppuhr Klasse ist die beste Wahl aufgrund seiner Genauigkeit:
http://msdn.microsoft.com/en -US / library / system.diagnostics.stopwatch.aspx
Beispiel:
https : //web.archive.org/web/1/http: //articles.techrepublic%2ecom%2ecom/5100-10878_11-6167361.html
Neben System.Diagnostics.Stopwatch auch überprüfen Sie diesen Link: die Multimedia-Timer für das .NET Framework . HTH
Ich habe eine Methode gefunden, die genau etwas mehr funktioniert, dann Stoppuhr, Performancecounters und jede andere Implementierung stoße ich auf und nicht Platform Invoke erfordern oder nicht.
Siehe https://stackoverflow.com/questions/15725711/ Erhalten-Mikropräzisions-mit-net-ohne-Plattform-invoke
Lassen Sie mich wissen, wenn Sie sonst finden!