Posible duplicado:
¿Cómo mido cuánto tiempo se ejecuta una función?
Tengo un método de toma de tiempo de E / S que copia datos de una ubicación a otra. ¿Cuál es la mejor y más real forma de calcular el tiempo de ejecución? Thread
? Timer
? Stopwatch
? ¿Alguna otra solución? Quiero el más exacto y lo más breve posible.
ThreadPool.QueueUserWorkItem(delegate { CopyFiles(folder, dest); });
interior, pero el cronómetro se detiene antes de que todo esté hecho.Por experiencia personal, la
System.Diagnostics.Stopwatch
clase se puede usar para medir el tiempo de ejecución de un método, sin embargo, CUIDADO : ¡No es del todo exacto!Considere el siguiente ejemplo:
Resultados de ejemplo
Ahora te preguntas; "Bueno, ¿por qué tardó 132 ms la primera vez, y significativamente menos el resto del tiempo?"
La respuesta es que
Stopwatch
no compensa la actividad de "ruido de fondo" en .NET, como JITing. Por lo tanto, la primera vez que ejecuta su método, .NET JIT lo es primero. El tiempo que lleva hacer esto se agrega al tiempo de la ejecución. Igualmente, otros factores también harán que varíe el tiempo de ejecución.¡Lo que realmente debería estar buscando con absoluta precisión es el perfil de rendimiento !
Echa un vistazo a lo siguiente:
RedGate ANTS Performance Profiler es un producto comercial, pero produce resultados muy precisos. - Aumente el rendimiento de sus aplicaciones con la creación de perfiles .NET
Aquí hay un artículo de StackOverflow sobre creación de perfiles: - ¿Cuáles son algunos buenos perfiles de .NET?
También he escrito un artículo sobre el Perfil de rendimiento usando el cronómetro que es posible que desee ver - Perfil de rendimiento en .NET
fuente
StopWatch
clase busca tu mejor solución.También tiene un campo estático llamado
Stopwatch.IsHighResolution
. Por supuesto, este es un problema de hardware y sistema operativo.fuente
Si está interesado en comprender el rendimiento, la mejor respuesta es utilizar un generador de perfiles.
De lo contrario, System.Diagnostics.StopWatch proporciona un temporizador de alta resolución.
fuente
StopWatch usará el contador de alta resolución
Si está midiendo IO, entonces sus cifras probablemente se verán afectadas por eventos externos, y me preocuparía mucho. exactitud (como has indicado anteriormente). En cambio, tomaría un rango de medidas y consideraría la media y la distribución de esas cifras.
fuente
fuente