Como mucha gente ha notado, la clase de cronómetro de alta precisión está diseñada para responder la pregunta "¿cuánto tiempo tomó esto?" mientras que la clase DateTime está diseñada para responder a la pregunta "¿cuándo comienza Doctor Who?" Use la herramienta correcta para el trabajo.
Sin embargo, hay más en el problema de medir correctamente el tiempo transcurrido que simplemente obtener el temporizador correcto. También debe asegurarse de que está midiendo lo que realmente desea medir.Por ejemplo, considere:
// start the timer
M();
// stop the timer
// start another timer
M();
// stop the timer
¿Habrá una diferencia significativa entre los tiempos de las dos llamadas? Posiblemente sí. Recuerde, la primera vez que se llama un método , el jitter debe compilarlo desde IL en el código de máquina. Eso lleva tiempo. La primera llamada a un método puede ser en muchos casos veces más larga que todas las llamadas subsiguientes juntas.
Entonces, ¿qué medida es "correcta"? La primera medición? ¿El segundo? ¿Un promedio de ellos? Depende de lo que intente optimizar para. Si está optimizando para inicio rápido, entonces se preocupa mucho por el tiempo de jit. Si está optimizando para número de páginas idénticas servidas por segundo en un servidor calentado, entonces no le importa en absoluto el tiempo de jit y debería diseñar sus pruebas en y no en medirlo. Asegúrese de estar midiendo para lo que realmente está optimizando.
Las mejores herramientas para esto son herramientas de perfil real como RedGate Profiler o una que viene con una de las versiones de Visual Studio. Por falta de eso, lo que dijo Anthony sería su mejor opción –
@George - Para operaciones grandes o ver dónde se puede pasar el tiempo, pero para fragmentos de código cortos, ver cuál es la forma más rápida de hacer algo 10.000 veces, por ejemplo ... los perfiladores interfieren activamente y probablemente no sean la mejor manera de obtener resultados precisos. –
Bastante, buen punto. –