Pregunta

Espero que no todo el mundo es el uso Racional de Purificar.

Entonces, ¿qué hace usted cuando desea medir:

  • el tiempo tomado por una función
  • pico de uso de memoria de
  • la cobertura de código

Por el momento, podemos hacerlo de forma manual [el uso de declaraciones de registro con las marcas de tiempo y otro script para analizar el registro y la salida a excel.ufff...)

¿Qué recomendaría usted?Apuntando a las herramientas o técnicas se agradece!

EDITAR:Lo siento, yo no especificar el medio ambiente en primer lugar, Su planicie C en una propiedad de un móvil plataforma

¿Fue útil?

Solución

Usted probablemente querrá diferentes herramientas para la creación de perfiles de rendimiento y cobertura de código.

Para la generación de perfiles prefiero Tiburón en MacOSX.Es libre de Manzana y muy buena.Si tu aplicación es de vainilla C debe ser capaz de usarlo, si usted puede conseguir el asimiento de un Mac.

Para la generación de perfiles en Windows, puede utilizar LTProf.Barato, pero no mucho:http://successfulsoftware.net/2007/12/18/optimising-your-application/

(Creo que los de Microsoft son realmente disparo a sí mismos en el pie si no se proporciona un decente profiler con las versiones más baratas de Visual Studio).

Para la cobertura prefiero Cobertura Validador de Windows:http://successfulsoftware.net/2008/03/10/coverage-validator/ Se actualiza la cobertura en tiempo real.

Otros consejos

He hecho esto muchas veces.Si usted tiene un IDE, o un helado, no es una técnica que toma algo de esfuerzo manual, pero funciona sin fallos.

Advertencia:los programadores modernos odio esto, y me voy a poner a votada abajo.Ellos aman a sus herramientas.Pero lo que realmente funciona, y no siempre tienen buenas herramientas.

Supongo que en su caso el código es algo así como DSP o vídeo que se ejecuta en un contador de tiempo y tiene que ser rápido.Supongamos que lo que se ejecute en cada paso del temporizador subrutina A.Escribir algo de código de prueba para ejecutar Una subrutina en un circuito simple, digamos 1000 veces, o el tiempo suficiente para hacer esperar al menos unos segundos.

Mientras se ejecuta, de forma aleatoria detener con una tecla de pausa y muestra la pila de llamadas (no sólo el contador de programa) y grabarlo.(Que es el manual de la parte.) Ello, algunas de número de veces que, al igual que 10.Una vez no es suficiente.

Ahora buscar puntos en común entre la pila de muestras.Busque cualquier instrucción o de instrucción de llamada que aparece en al menos 2 muestras.Habrá muchos de estos, pero algunos de ellos estarán en el código que usted puede optimizar.

Hacerlo, y tendrás una buena aceleración, garantizado.Las 1000 iteraciones tomará menos tiempo.

La razón que usted no necesita una gran cantidad de muestras es que no estás en busca de pequeñas cosas.Como si ver a un particular instrucción de llamada en 5 de cada 10 muestras, es responsable de aproximadamente el 50% del tiempo total de ejecución.Más muestras de contaría con más precisión lo que el porcentaje es, si usted realmente quiere saber.Si eres como yo, todo lo que quieres saber es donde está, así que usted puede arreglar, y pasar a la siguiente.

Haga esto hasta que usted no puede encontrar nada más para optimizar, y usted estará en o cerca de su velocidad superior.

Para aplicaciones complejas soy una gran fan de Intel Vtune.Es un poco diferente de la mentalidad tradicional de un analizador que los instrumentos del código.Funciona mediante el muestreo, el procesador para ver donde el puntero de instrucción es de 1.000 veces por segundo.Tiene la enorme ventaja de no requerir ningún cambio a sus binarios, que tan a menudo como no iba a cambiar el tiempo de lo que estamos tratando de medir.

Por desgracia no es buena para .net o java, puesto que no hay una manera para que el Vtune a la mapa puntero de instrucción al símbolo, al igual que existe con el código tradicional.

También permite medir todo tipo de procesador/hardware de indicadores centrados en el, como relojes de acuerdo a las instrucciones, caché de aciertos/fallos de TLB de aciertos/errores, etc, que permiten identificar el por qué de ciertas secciones de código que se puede estar tomando más de lo que usted esperaría simplemente inspeccionando el código.

Si vas a hacer un 'metálico' incrustado 'C' del sistema (no estoy muy seguro de lo que 'móvil' implícita en su publicación), a continuación, suelen tener algún tipo de temporizador de ISR, en el que es bastante fácil de ejemplo el código de la dirección en la que se produjo la interrupción (por la excavación de vuelta en la pila o mirando en el enlace de registros o lo que sea).Entonces es trivial para construir un histograma de direcciones en una combinación de precisión/rango de interés.

Normalmente, a continuación, no es demasiado difícil inventar alguna combinación de código/script/hojas de Excel que se combina con su histograma cuenta con las direcciones de la enlazador símbolo/archivo de lista para darle la información de perfil.

Si tienes mucha RAM limitada, puede ser un poco de un dolor para recopilar datos suficientes para que esto sea simple y útil, pero usted tendría que contarnos más sobre su plataforma.

nProf - Libre, hace que para .NET.

Hace el trabajo, al menos lo suficiente como para ver el 80/20.(20% del código, teniendo el 80% del tiempo)

De Windows (.NETO y de los Nativos Exes): AQTime es una gran herramienta para el dinero.Independiente o como un Visual Studio plugin.

Java:Yo soy un fan de JProfiler.De nuevo, se puede ejecutar de forma independiente o como un Eclipse (o varios otros IDEs) plugin.

Creo que ambos tienen versiones de prueba.

El Google Perftools son muy útiles en este sentido.

Yo uso devpartner con MSVC 6 y XP

Cómo son herramientas de ir a trabajar si la plataforma es una propiedad de un sistema operativo?Creo que estás haciendo lo mejor que puede hacer ahora

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