Medición del tiempo exacto para pruebas de rendimiento [duplicado]

Resuelto Svish asked hace 15 años • 7 respuestas

¿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?

Svish avatar Jun 09 '09 17:06 Svish
Aceptado

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);
Philippe Leybaert avatar Jun 09 '2009 10:06 Philippe Leybaert

Como han dicho otros, Stopwatches 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 ITimerinterfaz para esto, con implementaciones de StopwatchTimer, CpuTimeretc. cuando estén disponibles.

Jon Skeet avatar Jun 09 '2009 10:06 Jon Skeet