Dies reicht nicht professionell aus:
Stopwatch sw = Stopwatch.StartNew();
PerformWork();
sw.Stop();
Console.WriteLine("Dauer: {0}ms", sw.Elapsed.TotalMilliseconds);
Eine zuverlässigere Version ist:
PerformWork();
int repeat = 1000;
Stopwatch sw = Stopwatch.StartNew();
for (int i = 0; i < repeat; i++)
{
PerformWork();
}
sw.Stop();
Console.WriteLine("Dauer: {0}ms", sw.Elapsed.TotalMilliseconds / repeat);
In meinem richtigen Code werde ich einen Aufruf zu GC.Collect hinzufügen, um den verwalteten Heap in einen bekannten Zustand zu versetzen, und einen Aufruf zu Sleep hinzufügen, damit verschiedene Intervalles des Codes leicht im ETW-Profil getrennt werden können.
0 Stimmen
Übrigens, wenn Sie nicht auf der Suche nach etwas Schnellem und Dreckigem sind, können Leistungsindikatoren verwendet werden.
1 Stimmen
Wenn Sie eine größere Genauigkeit benötigen, verwenden Sie Stopwatch.GetTimestamp, ansonsten ist die Antwort gut.
0 Stimmen
@dbasnett Können Sie in einer Antwort mehr ins Detail gehen?
0 Stimmen
Im obigen Beispiel ändern Sie start und endtime in long und weisen Sie ihnen statt DateTime.Now Stopwatch.GetTimestamp zu. Die benötigte Zeit beträgt (end-start)/Stopwatch.Frequency.
0 Stimmen
Siehe auch: Der Fall gegen DateTime.Now
0 Stimmen
Jedes Mal, wenn Sie DateTime.Now verwenden würden, fragen Sie sich, ob Sie nicht stattdessen DateTime.UtcNow verwenden sollten. Das gesagt, ist Stopwatch die richtige Lösung.
2 Stimmen
"Best" ist subjektiv. Diese Frage muss auf objektive Weise definieren, was mit "best" gemeint ist.