algunas partes de mi programa son muy lentas. y me preguntaba si hay alguna herramienta que pueda usar y, por ejemplo, me puede decir que ejecutar OKA() tomó 100ms, etc ... o información tan útil similar a eso.¿Alguna herramienta que indique cuánto tarda cada método en ejecutarse?
Respuesta
El espacio de nombres System.Diagnostics ofrece una clase útil llamada Stopwatch, que se puede utilizar para medir el tiempo de partes de su código (piénselo como un "generador de perfiles de un pobre").
Esta es la forma en que lo utilizaría:
Stopwatch stopwatch = new Stopwatch();
stopwatch.Start(); // Start timing
// This is what we want to time
DoSomethingWeSuspectIsSlow();
stopwatch.Stop();
Console.WriteLine("It took {0} ms.", stopwatch.ElapsedMilliseconds);
o, crea una clase que implementa idisposable, que inicia el temporizador en contruction, se detiene y escribe en dispose. ¡Entonces puede medir el tiempo de cualquier bloque de código envolviéndolo con una instrucción de uso! –
También asegúrese de que el método haya sido invocado al menos una vez antes de cronometrarlo, para que no mida el tiempo de compilación JIT. –
@John Gardner: su construcción también es útil para obtener tiempos de perfunción de un sistema Prod en ejecución. Acumule los tiempos para las partes del elemento de trabajo con una etiqueta que los identifique y vacíe al final del elemento de trabajo. –
Ese tipo de aplicaciones son conocidos como "perfiladores"
Aquí hay uno, por ejemplo: example
Si está utilizando Visual Studio Team System no es un generador de perfiles incorporado en 'Herramientas de rendimiento. Hay un montón de antecedentes útiles sobre esto en this blog.
He encontrado esto extremadamente útil para identificar el 20% of my code that runs 80% of the time, y de ahí lo que debería preocuparme por optimizar.
Otra técnica simple que puede ser sorprendentemente efectiva es ejecutar su código de liberación en el depurador, e interrumpirlo unas cuantas veces (10 o más pueden ser suficientes) mientras está en el estado 'ocupado' que está tratando de diagnosticar . Puede encontrar información de pila de llamadas recurrente que lo dirige al área general de preocupación. Nuevamente, la regla 80/20 en vigencia.
+1 He estado usando ese método de interrupción desde antes de que se concibieran los perfiladores. Me desconcertó que tan poca gente lo supiera. Yo diría que realmente identifica el área de preocupación, y la regla 80/20 es más como 99.9/0.1 –
Lamentablemente, ese enlace 80/20 es particularmente vacío. –
@Mike Dunlavey - ¿tienes uno mejor? Editaré en si es así. Gracias –
Ver nuestra SD C# Profiler. Puede proporcionar los tiempos de función de la función por sí mismo y/o todas sus calles.
- 1. ¿Cuánto tarda mi aplicación Python en ejecutarse?
- 2. ¿Cuánto tarda mi código en ejecutarse?
- 3. ¿Cuál es la mejor manera de medir cuánto tiempo tarda el código en ejecutarse?
- 4. ¿Cómo se cronometra cuánto tarda un programa de Python en ejecutarse?
- 5. ¿Cuánto tarda Dropbox en revisar la aplicación?
- 6. ¿Qué sucede si un TimerTask tarda más en ejecutarse que el intervalo especificado?
- 7. ¿Cómo puedo calcular cuánto tiempo tarda una función en jQuery?
- 8. ¿Cómo puedo medir el tiempo de CPU que tarda una función Clojure en ejecutarse?
- 9. Creación de una interfaz web para una secuencia de comandos que tarda 30 minutos en ejecutarse
- 10. ¿Cuánto tiempo tarda Android Emulator en comenzar? ¿Necesita cerrar/iniciar si cada vez que cambia el código de Java?
- 11. JS: ¿Cuánto tiempo se tarda en llamar a una función?
- 12. Tiempo que tarda una importación en Python
- 13. ¿Cómo medir el tiempo que tarda una función en ejecutarse desde un shell erlang?
- 14. Manejo de excepciones. ¿Cuánto tiempo tarda la captura?
- 15. ¿Alguna herramienta para hacer que git construya cada compromiso en una sucursal en un repositorio separado?
- 16. ¿Hay alguna herramienta que pueda incorporar CSS?
- 17. ¿Hay alguna herramienta que detecte GUID duplicados?
- 18. ¿Hay alguna herramienta que admita matemáticas discretas?
- 19. SQL Server Stored Proc tarda (mucho) más tiempo en ejecutarse que la misma consulta ejecutada desde texto en Management Studio
- 20. ¿Cuánto tiempo tarda una consulta que devuelve 5 millones de registros?
- 21. ¿Hay algún método que indique a mi programa que se cierre?
- 22. Indique a RavenDB que ignore una propiedad
- 23. ¿Hay alguna manera de configurar un trabajo de SQL Server programado para ejecutarse cada 30 segundos?
- 24. ¿Cuánto tiempo se tarda en crear 1 millón de hilos en Haskell?
- 25. ¿Qué determina cuánto tarda un servidor COM fuera de proceso en darse cuenta de que un cliente ha muerto?
- 26. ¿Hay alguna herramienta que documente un repositorio SVN?
- 27. ¿Hay alguna manera de ver cuánto uso de CPU usa cada núcleo?
- 28. ¿Cómo puedo consultar cuánto tiempo tarda una restauración de la base de datos del servidor SQL?
- 29. ¿Cómo hacer que Ruby ejecute alguna tarea cada 10 minutos?
- 30. ¿Cuánto tiempo lleva cada segmento de tiempo de subprocesos en Windows XP?
Se llama [Profiler] (http://stackoverflow.com/search?q= [c% 23] + profiler). – dtb
Lo que estás buscando se llama perfilador. – GrandmasterB
posible duplicado de [¿Qué son algunos buenos perfiladores .NET?] (Http://stackoverflow.com/questions/3927/what-are-some-good-net-profilers) – dtb