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?

War es hilfreich?

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 mit Stopwatch.Frequency (die auf allen Maschinen nicht das gleiche ist), um die verstrichene Zeit zu berechnen.
  •   
  • Elapsed.Ticks ( mit der Punkt), die Anzahl der Timespan 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.

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!

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top