Mögliches Duplikat:
Wie messe ich, wie lange eine Funktion ausgeführt wird?
Ich habe eine E / A-Zeitmessmethode, mit der Daten von einem Ort an einen anderen kopiert werden. Was ist die beste und realistischste Methode zur Berechnung der Ausführungszeit? Thread
? Timer
? Stopwatch
? Irgendeine andere Lösung? Ich möchte das genaueste und kürzeste so viel wie möglich.
ThreadPool.QueueUserWorkItem(delegate { CopyFiles(folder, dest); });
Innenseite hat, aber die Stoppuhr stoppt, bevor alles erledigt ist.Aus persönlicher Erfahrung kann die
System.Diagnostics.Stopwatch
Klasse verwendet werden, um die Ausführungszeit einer Methode zu messen. ACHTUNG : Sie ist nicht ganz genau!Betrachten Sie das folgende Beispiel:
Beispielergebnisse
Jetzt wunderst du dich; "Nun, warum hat es das erste Mal 132 ms gedauert und den Rest der Zeit deutlich weniger?"
Die Antwort lautet, dass
Stopwatch
"Hintergrundgeräusche" in .NET wie JITing nicht kompensiert werden. Wenn Sie Ihre Methode zum ersten Mal ausführen, wird sie daher zuerst von .NET JIT ausgeführt. Die dafür erforderliche Zeit wird zur Ausführungszeit addiert. Ebenso führen andere Faktoren dazu, dass die Ausführungszeit variiert.Was Sie wirklich auf der Suche nach absoluter Genauigkeit sein sollten, ist das Leistungsprofil !
Schauen Sie sich Folgendes an:
RedGate ANTS Performance Profiler ist ein kommerzielles Produkt, liefert jedoch sehr genaue Ergebnisse. - Steigern Sie die Leistung Ihrer Anwendungen mit .NET-Profilen
Hier ist ein StackOverflow-Artikel zur Profilerstellung: - Was sind einige gute .NET-Profiler?
Ich habe auch einen Artikel über Leistungsprofile mit Stoppuhr geschrieben, den Sie sich ansehen möchten - Leistungsprofile in .NET
quelle
StopWatch
Klasse sucht nach Ihrer besten Lösung.Es hat auch ein statisches Feld namens
Stopwatch.IsHighResolution
. Dies ist natürlich ein Hardware- und Betriebssystemproblem.quelle
Wenn Sie die Leistung verstehen möchten, verwenden Sie am besten einen Profiler.
Andernfalls bietet System.Diagnostics.StopWatch einen hochauflösenden Timer.
quelle
StopWatch verwendet den hochauflösenden Zähler
Wenn Sie IO messen, werden Ihre Zahlen wahrscheinlich von externen Ereignissen beeinflusst, und ich würde mir so viele Sorgen machen. Genauigkeit (wie oben angegeben). Stattdessen würde ich eine Reihe von Messungen durchführen und den Mittelwert und die Verteilung dieser Zahlen berücksichtigen.
quelle
quelle