2010-02-20 4 views

Respuesta

3

El software comercial:

  • racional Cuantificar (caro, lento, pero muy detallado)
  • AQTime (menos costoso, menos lento, un poco detallada)

Software libre:

Estas alternativas comerciales cambiar el código compilado por 'uso de variables instrumentales' (instrucciones de la adición) a la misma y realizar la sincronización withing las instrucciones adicionales. Esto significa que hacen que su aplicación disminuya la velocidad con seriedad.

Estas alternativas gratuitas usan muestreo, lo que significa que son menos detalladas, pero muy rápidas. En la práctica, descubrí que, especialmente Very Sleepy, es muy bueno para echar un vistazo rápido a los problemas de rendimiento en su aplicación.

+0

Intenté tanto a Very Sleepy como a Luke StackWalker, pero no pueden decirme nada. Parece que no tienen acceso a mi código fuente. gprof sin embargo funciona bien. ¿Cómo? Me gustan mucho los perfiladores basados ​​en GUI, pero no están funcionando. – Pieter

+0

Este error fue producido por Luke StackWalker: 'ERROR: SymGetModuleInfo64, GetLastError: 1114 (Address: 7C90E514)' – Pieter

+0

He abierto una pregunta separada para este problema aquí: http://stackoverflow.com/questions/2302596/luke- stackwalker-returns-error-when-running-gprof-works-fine – Pieter

0

Sí, puede perfilar código with Visual Studio

+1

Soy un usuario de Eclipse, así que no es una opción para mí. – Pieter

+0

@Pieter: a continuación, especifique esta importante cláusula en * la pregunta * –

+2

En cualquier caso, las ediciones estándar y express de Visual Studio no incluyen un generador de perfiles. Con pro, hay un perfilador simple (línea de comandos) que creo que es una descarga por separado, y no es fácil de usar. Lo que Microsoft quiere es que la gente (rica) compre Team Suite. – Steve314

3

Hay un puerto de MinGW gprof que funciona casi igual que la variante de Linux. Puedes obtener MinGW installation completo (creo que gprof está incluido pero no estoy seguro) u obtener gprof desde MinGW binutils package.

Para Eclipse, hay TPTP pero no admite perfiles C/C++ hasta donde yo sé.

0

¿Cuál es la razón del perfil? ¿Desea a) medir los tiempos y obtener un gráfico de llamadas, ob) encontrar cosas que cambiar para acelerar el código? (No son lo mismo.)

Si (b) puede usar this trick, utilizando el botón Pausa en Eclipse.


Agregado: Tal vez ayudaría a transmitir alguna experiencia de lo que son en realidad problemas de rendimiento gusta, y donde se puede contar para encontrarlos. Aquí hay algunos ejemplos sencillos:

  • Un tipo de inserción (orden n^2), donde los elementos que se están ordenados son cadenas, y se compararon mediante una función de cadena de comparar. ¿Dónde está el punto caliente? en la comparación de cuerdas. ¿Dónde está el problema? En el tipo donde se llama a string-compare. Si n = 10 no es un problema, pero si n = 1000, de repente lleva mucho tiempo. El punto donde se llama a la comparación de cadenas es "frío", pero ahí es donde está el problema. Un pequeño número de muestras de la pila de llamadas lo señala con certeza.

  • Una aplicación que carga complementos tarda mucho tiempo en arrancar. Un perfilador dice que básicamente todo es "frío". Algo que mide el tiempo de E/S dice que es casi todo el tiempo de E/S, lo que parece ser lo que cabría esperar, por lo que puede parecer desesperado.Sin embargo, las muestras de pila muestran que un gran porcentaje de tiempo se usa con la pila a unas 20 capas de profundidad en el proceso de lectura de la parte de recursos de las DLL de complemento con el fin de traducir las constantes de cadena al idioma local. Investigando más a fondo, encontrará que la mayoría de las cadenas que se traducen no son del tipo que realmente necesita traducción. Simplemente los pusieron en "caso de que" pudieran necesitar traducción, y nunca se pensó que fueran algo que pudiera causar un problema de rendimiento. Arreglar ese problema trae un considerable ahorro de tiempo.

lo tanto, es común pensar en términos de "puntos calientes" y los "cuellos de botella", pero la mayoría de los programas, especialmente los más grandes, tienden a tener problemas de rendimiento en forma de llamadas de función que solicita un trabajo que no hace realmente hay que hacer. Afortunadamente, se muestran en la pila de llamadas durante el tiempo que están gastando.

+0

Estoy interesado en crear perfiles para ver qué partes de mi código tardan más en ejecutarse, de modo que pueda descubrir eventuales ineficiencias. – Pieter

+0

@Pieter: encontrar ineficiencias es (b). Estoy tratando de correr la voz sobre esto. Aquí hay otra opinión: http://stackoverflow.com/questions/2308026/which-has-been-the-most-reliable-fastest-windows-c-profiler-that-you-have-used/2311117#2311117 –

+0

Suena complicado para un novato C como yo. Mi aplicación ideal de perfiles debería poder establecer un mapa de calor sobre mi código para ver qué comandos tardan más en ejecutarse. Se supone que algunos códigos requieren más tiempo de procesamiento, lo sé, pero hay muchos casos en los que esto podría ayudar a detectar las ineficiencias antes mencionadas. – Pieter

Cuestiones relacionadas