stop startnew method ejemplo c# .net stopwatch

c# - startnew - .NET Stopwatch-penalización de rendimiento



stopwatch startnew (5)

Como su código de generación de perfiles se ejecuta solo una vez, su impacto en el rendimiento debería ser insignificante. Es solo un problema si pones llamadas al cronómetro dentro de tu ciclo interno / rutas de código críticas.

GetTickCount() debería ser una de las formas más rápidas de crear perfiles, pero solo tiene una precisión de unos pocos milisegundos. La función GetTickCount() API de Windows solo verifica una variable simple (que se actualiza cada pocos milisegundos); su costo es el costo de una invocación de método nativo y nada más. Está expuesto como Environment.TickCount en .NET . Pero como dije, dudo que esto importe. DateTime.UtcNow/Now tiene la misma precisión (baja) que GetTickCount .

En teoría, podría haber algún efecto sobre el jitter, pero eso es poco probable.

Posibles duplicados:
¿DateTime.Now es la mejor manera de medir el rendimiento de una función?
Cronómetro versus uso de System.DateTime.Now para cronometrar eventos

Tengo un código que necesita correr lo más rápido posible. Para poder registrar el tiempo de ejecución, utilizo la clase Stopwatch . Sospecho, Cronómetro puede afectar el rendimiento de una mala manera. ¿Tal vez usar una diferencia de DateTime puede ser más efectivo?

¿Cuál crees que tiene un mejor rendimiento?

Stopwatch sw = new Stopwatch(); sw.Start(); int a = 5; // Critical lines of code long elapsedMs = se.Elapsed.TotalMilliseconds;

O

DateTime startDate = DateTime.Now; int a = 5; // Critical lines of code long elapsedMs = DateTime.Now.Subtract(startDate).TotalMilleseconds;


Creo que el segundo será más eficiente en lo que respecta al rendimiento, y como indican los enlaces del comentario, si quieres medir el tiempo por debajo de los segundos, DateTime no será preciso aunque sería eficiente.

Creo que sí porque StopWatch mediría los tics continuamente en comparación con DateTime, que solo contendrá una instancia de DateTime, es decir, startTime.


El Stopwatch no hace nada entre las llamadas de Start y Stop ... Simplemente almacena la marca de tiempo actual (a través de QueryPerformanceCounter ) cuando la inicia y la compara con la marca de tiempo actual cuando la detiene. Por lo tanto, no hay ninguna razón por la que pueda afectar el rendimiento de su código, al menos de manera significativa. Stopwatch fue diseñado específicamente para mediciones de tiempo precisas, por lo que puede estar seguro de que está completamente optimizado. También es mucho más preciso que comparar valores sucesivos de DateTime.Now . ...


La respuesta realmente depende de qué precisión intentes lograr. Para precisión superior a los segundos, el cronómetro es un mejor enfoque debido al uso de un sistema de medición más preciso que el de fecha y hora. Consulte Stopwatch

Desde el punto de vista del rendimiento, dudo que haya tanta diferencia al ver cómo Start () y DateTime.Now almacenan los valores del sistema de medición correspondiente y, al recuperar los milisegundos, calcula la diferencia y la convierte (según se requiera) a la unidad de medida correspondiente


No creo que realmente importe si solo lo llama algunas veces. Sin embargo, todo depende de cuál sea el nivel de precisión que está solicitando ; Stopwatch es mucho más preciso, ya que depende de QueuePerformanceCounter API, por lo que utiliza una resolución más alta.