Medición del tiempo exacto para pruebas de rendimiento [duplicado]
¿Cuál es la forma más exacta de ver cuánto tiempo tardó en código algo, por ejemplo una llamada a un método?
Supongo que lo más fácil y rápido es este:
DateTime start = DateTime.Now;
{
// Do some work
}
TimeSpan timeItTook = DateTime.Now - start;
¿Pero qué tan exacto es esto? ¿Hay mejores maneras?
Una mejor manera es utilizar la clase Stopwatch:
using System.Diagnostics;
// ...
Stopwatch sw = new Stopwatch();
sw.Start();
// ...
sw.Stop();
Console.WriteLine("Elapsed={0}",sw.Elapsed);
Como han dicho otros, Stopwatch
es una buena clase para usar aquí. Puedes envolverlo con un método útil:
public static TimeSpan Time(Action action)
{
Stopwatch stopwatch = Stopwatch.StartNew();
action();
stopwatch.Stop();
return stopwatch.Elapsed;
}
(Tenga en cuenta el uso de Stopwatch.StartNew()
. Prefiero esto a crear un cronómetro y luego llamarlo Start()
en términos de simplicidad). Obviamente, esto conlleva el problema de invocar a un delegado, pero en la gran mayoría de los casos eso no será relevante. Luego escribirías:
TimeSpan time = StopwatchUtil.Time(() =>
{
// Do some work
});
Incluso podría crear una ITimer
interfaz para esto, con implementaciones de StopwatchTimer,
CpuTimer
etc. cuando estén disponibles.