Klasa StopWatch
nie musi być Disposed
lub Stopped
w przypadku błędu. Tak, to najprostszy kod do czasie niektóre działanie jest
public partial class With
{
public static long Benchmark(Action action)
{
var stopwatch = Stopwatch.StartNew();
action();
stopwatch.Stop();
return stopwatch.ElapsedMilliseconds;
}
}
Przykładowe wywołanie kodu
public void Execute(Action action)
{
var time = With.Benchmark(action);
log.DebugFormat(“Did action in {0} ms.”, time);
}
nie podoba mi się pomysł z tym iteracje w kodzie StopWatch
. Zawsze można utworzyć inną metodę lub rozszerzenie, które obsługuje wykonywanie iteracji N
.
public partial class With
{
public static void Iterations(int n, Action action)
{
for(int count = 0; count < n; count++)
action();
}
}
kod wywołujący Próbka
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);
}
Oto wersje metodę rozszerzenia
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);
}
}
i próbki kodu wywołanie
public void Execute(Action action, int n)
{
var time = action.Iterations(n).Benchmark()
log.DebugFormat(“Did action {0} times in {1} ms.”, n, time);
}
testowałem statyczne metody i sposoby rozszerzenia (grzebień iteracje i benchmark), a delta oczekiwanego czasu wykonania i rzeczywistego czasu wykonania to < = 1 ms.
Możesz chcieć zastąpić sw.Start() przez sw.StartNew(), aby zapobiec przypadkowemu zwiększeniu czasu, jaki upłynął dla każdego kolejnego wywołania s.Time(), ponownego użycia tej samej instancji Stopwatch. – VVS
Możesz zdobyć jeszcze więcej C# 3.0, i zamienić tę starą instrukcję "for" na foreach (var i in Enumerable.Range (0, iterations)) –
@Jay Zgadzam się, że "foreach" z Enumerable.Range wygląda trochę bardziej "nowoczesne", ale moje testy pokazują, że jest około czterokrotnie wolniejszy niż pętla "dla" w dużej liczbie. YMMV. –