Pregunta

¿Hay alguna herramienta para dar algún tipo de histograma de dónde se pasa la mayor parte del tiempo de ejecución del programa?

Esto es para un proyecto que usa c ++ en Visual Studio 2008.

¿Fue útil?

Solución

El nombre que busca es un generador de perfiles . Pruebe Encuentre cuellos de botella de aplicaciones con Visual Studio Profiler

Otros consejos

Necesita un profiler .

La edición Visual Studio Team incluye un generador de perfiles (que es lo que está buscando), pero es posible que solo tenga acceso a las ediciones Professional o Express. Eche un vistazo a estos hilos para alternativas:

¿Cuál es su herramienta de creación de perfiles favorita (para C ++) ¿Cuáles son algunos buenos perfiladores para C ++ nativo en Windows?

Realmente no deberías optimizar CUALQUIER parte de tu aplicación hasta que hayas medido cuánto tiempo tardan en ejecutarse. De lo contrario, puede estar dirigiendo el esfuerzo en el lugar equivocado, y puede estar empeorando las cosas, no mejorando.

He usado un generador de perfiles llamado " AQ Time " que proporciona todos los detalles que desea saber sobre el rendimiento de su código. Sin embargo, no es gratis ...

Puede obtener un histograma del contador del programa, pero es prácticamente inútil a menos que esté haciendo algo tonto como pasar el tiempo en una especie de burbuja de una gran variedad de entradas o dobles.

Si hace algo tan simple como una burbuja de una serie de cadenas, el histograma de la PC solo le indicará que tiene un punto de acceso en la rutina de comparación de cadenas. Eso no es de mucha ayuda, ¿verdad?

Sé que no harías ese tipo de burbujas, pero solo por diversión, supongamos que lo hiciste, y te estaba tomando el 90% de tu tiempo. (es decir, si lo solucionó, podría aumentar hasta 10 veces más rápido).

En realidad, es algo muy fácil de encontrar, porque si solo presiona el botón de pausa en el depurador, seguramente verá que se detiene en la rutina de comparación de cadenas. Luego, si buscas en la pila un nivel, mirarás directamente al bucle de clasificación de burbujas que es tu error. Si no está seguro de haber detectado realmente el problema, haga una pausa varias veces. La cantidad de veces que ve el problema le dice cuán costoso es.

Cualquier línea de código que aparece en la pila de llamadas en múltiples pausas, es algo que le está pidiendo que lo arregle. Algunos no se pueden, como "llamar a _main", pero si puedes, obtendrás una buena aceleración, garantizada.

Luego hazlo una y otra vez.

Cuando te quedas sin cosas que puedes arreglar, entonces realmente has ajustado el programa a una pulgada de su vida útil.

Es así de simple.


También puede usar el generador de perfiles en Visual Studio. Es una buena herramienta, pero tenga en cuenta estas deficiencias:

  • Confundirlo con "tiempo exclusivo", que si se concentra en la información a nivel de línea, casi no tiene sentido.

  • Si su programa está perdiendo el tiempo haciendo E / S, no lo verá, porque cuando deja de hacer E / S, las muestras se detienen, a menos que use instrumentación.

  • Pero si usa instrumentación, no obtendrá información de nivel de línea, solo nivel de función. Está bien si sus funciones son todas pequeñas.

  • Confundiéndote con el "árbol de llamadas". Lo que importa para una línea de código es en cuántas muestras de pila está. Si está en muchas ramas del árbol de llamadas, el árbol de llamadas no le mostrará lo que realmente cuesta.

  • Si le dice que una línea es costosa, no puede decirle por qué. Para eso, desea ver tanta información de estado en cada muestra como necesite, en lugar de solo resúmenes.

  • Es difícil decir cuándo quieres hacer muestras y cuándo no. Desea que se muestre cuando esté esperando la aplicación, no cuando la esté esperando.

Entonces, ahora que sabe que necesita un generador de perfiles, es posible que no tenga el Visual Studio, así que Very Sleepy podría ser de ayuda.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top