Die StopWatch
Klasse braucht nicht Disposed
oder Stopped
auf Fehler zu sein. So ist die einfachste Code Zeit einige Aktion ist
public partial class With
{
public static long Benchmark(Action action)
{
var stopwatch = Stopwatch.StartNew();
action();
stopwatch.Stop();
return stopwatch.ElapsedMilliseconds;
}
}
Beispiel Telefonvorwahl
public void Execute(Action action)
{
var time = With.Benchmark(action);
log.DebugFormat(“Did action in {0} ms.”, time);
}
ich nicht auf die Idee gefällt der Iterationen in den StopWatch
Code enthält. Sie können immer eine andere Methode oder Erweiterung erstellen, die die Ausführung von N
Iterationen behandelt.
public partial class With
{
public static void Iterations(int n, Action action)
{
for(int count = 0; count < n; count++)
action();
}
}
Beispielaufrufcode
public void Execute(Action action, int n)
{
var time = With.Benchmark(With.Iterations(n, action));
log.DebugFormat(“Did action {0} times in {1} ms.”, n, time);
}
Hier sind die Erweiterungsmethode Versionen
public static class Extensions
{
public static long Benchmark(this Action action)
{
return With.Benchmark(action);
}
public static Action Iterations(this Action action, int n)
{
return() => With.Iterations(n, action);
}
}
Und ruft Beispielcode
public void Execute(Action action, int n)
{
var time = action.Iterations(n).Benchmark()
log.DebugFormat(“Did action {0} times in {1} ms.”, n, time);
}
ich die statischen Methoden und Erweiterungsmethoden getestet (Kamm Iterationen und Benchmark) und das Delta der erwarteten Ausführungszeit und der tatsächlichen Ausführungszeit ist < = 1 ms.
Sie könnten sw.Start() mit sw.StartNew() ersetzen, um die verstrichene Zeit für jeden aufeinanderfolgenden Aufruf von s.Time() versehentlich zu erhöhen und die gleiche Stoppuhr-Instanz wiederzuverwenden. – VVS
Sie könnten noch mehr C# 3.0, und ersetzen Sie diese alt-fashed 'for' Anweisung mit foreach (var i in Enumerable.Range (0, Iterationen)) –
@Jay Ich stimme zu, dass "foreach" mit Enumerable.Range ein wenig aussieht mehr "modern", aber meine Tests zeigen, dass es etwa vier mal langsamer als eine "for" -Schleife über eine große Anzahl ist. YMMV. –