La clase StopWatch
no necesita ser Disposed
o Stopped
en caso de error. Por lo tanto, el código más simple de tiempo alguna acción es
public partial class With
{
public static long Benchmark(Action action)
{
var stopwatch = Stopwatch.StartNew();
action();
stopwatch.Stop();
return stopwatch.ElapsedMilliseconds;
}
}
Muestra código de llamada
public void Execute(Action action)
{
var time = With.Benchmark(action);
log.DebugFormat(“Did action in {0} ms.”, time);
}
no me gusta la idea de incluir las iteraciones en el código StopWatch
. Siempre puede crear otro método o extensión que maneje la ejecución de iteraciones N
.
public partial class With
{
public static void Iterations(int n, Action action)
{
for(int count = 0; count < n; count++)
action();
}
}
código de llamada Muestra
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);
}
Éstos son las versiones método de extensión
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);
}
}
y el código llamando muestra
public void Execute(Action action, int n)
{
var time = action.Iterations(n).Benchmark()
log.DebugFormat(“Did action {0} times in {1} ms.”, n, time);
}
he probado los métodos estáticos y métodos de extensión (peine ining iterations y benchmark) y el delta del tiempo de ejecución esperado y el tiempo de ejecución real es < = 1 ms.
Es posible que desee reemplazar sw.Start() con sw.StartNew() para evitar aumentar accidentalmente el tiempo transcurrido para cada llamada consecutiva de s.Time(), reutilizando la misma instancia de Cronómetro. – VVS
Podría obtener aún más C# 3.0, y reemplazar esa declaración 'for' por 'foreach' (var i en Enumerable.Range (0, iteraciones)) –
@Jay Estoy de acuerdo con que "foreach" con Enumerable.Range se ve un poco más "moderno", pero mis pruebas muestran que es cuatro veces más lento que un ciclo "para" en un conteo grande. YMMV. –