Herramientas de análisis de perfil y memoria para Delphi

Recientemente me actualicé de Delphi 4 a Delphi 2009. Con Delphi 4 utilicé GpProfile de Primoz Gabrijelcic como perfilador y Memory Sleuth de Turbo Power para el análisis de memoria y la depuración de fugas. Ambos funcionaron bien para mí. Pero ahora necesito nuevas herramientas que funcionen con Delphi 2009.

El líder en herramientas de perfil / análisis para Delphi por un amplio margen es obviamente AQTime de AutomatedQA . Incluso recientemente engulló Memproof de Atanas Soyanov , que entendí que era una herramienta de análisis de memoria excelente y gratuita, e incorporó su funcionalidad en AQTime. Pero AQ Time es muy costoso para un progtwigdor individual. En realidad, cuesta más que la mejora del costo de Delphi 2009.

Así que mi pregunta es: ¿hay otras opciones menos costosas para hacer análisis de perfiles y de memoria en las versiones actuales de Delphi con las que está satisfecho y lo recomiende, o debería morder el grano y pagar mucho dinero por AQ Time?


Addenum: parece que los primeros respondedores indican que el administrador FastMM ya incluido en Delphi es muy bueno para encontrar memory leaks.

Entonces, ¿hay alguna buena alternativa para el perfil de código fuente?

Uno de los que me llama la atención es ProDelphi de Michael Adolph, que representa menos de la sexta parte del costo de AQTime. ¿Lo usas? ¿Vale la pena pagar AQTime seis veces más?


Addenum 2: descargué versiones de prueba de AQTime y ProDelphi.

AQ Time fue un poco abrumador y un poco confuso al principio. Tomó algunas horas encontrar algunos de los trucos necesarios para conectarlo.

ProDelphi se parecía mucho al perfil Gp al que estaba acostumbrado. Pero sus ventanas son abarrotadas y confusas y no es tan agradable como GpProfile.

Para mí las grandes diferencias parecen ser:

  1. ProDelphi cambia tu código. AQTime no. Cambiar el código puede dañar sus datos si algo sale mal, pero mi experiencia con GpProfile fue que nunca me pasó. Más uno para AQ Time.

  2. ProDelphi requiere que desactives la optimización. Pero lo que desea perfilar es su progtwig con optimización, la forma en que se ejecutará. Más uno para AQ Time.

  3. ProDelphi solo puede realizar un perfil de la función o procedimiento. AQTime puede ir a líneas individuales. Plus 2 para AQTime.

  4. ProDelphi tiene una versión gratuita que perfilará 20 rutinas, y su versión pro cuesta menos de $ 100 USD. AQTime cuesta $ 600 USD. Plus 4 para ProDelphi.

El marcador ahora es 4-4. ¿Qué piensas?


Addenum 3: Primoz Gabrijelcic planea hacer que GpProfile vuelva a funcionar. Vea sus comentarios sobre algunas de las respuestas a continuación. Él en StackOverflow como Gabr .


Addenum 4: Parece que puede haber una solución de perfilador después de todo. Vea el asfímer de fuente abierta de Andre, que se describe a continuación .

Por el precio, no puedes vencer a FastMM4 como un rastreador de memoria. Es simple de usar pero potente y bien integrado con Delphi.
Supongo que sabes que, sin descargar, instalar o cambiar nada más, simplemente poner esta línea

ReportMemoryLeaksOnShutDown := True; 

en cualquier lugar de su código, habilitará informes básicos de pérdidas de memoria.
Si necesita más información sobre locking, EurekaLog es un producto muy bueno que usamos. MadExcept también tiene una buena reputación …

Para perfilar específicamente, tenemos AQTime.

En cuanto a gpProfile, puedes probar y poner errores en SO para una actualización … o ir y actualizar gpProfile tú mismo, ya que es de código abierto . 😉

Creé un generador de perfiles de código abierto para Delphi: http://code.google.com/p/asmprofiler/

No es perfecto, pero es gratis y de código abierto :-).

La razón principal por la que lo hice fue porque me perdí un árbol de llamadas exacto. Por ejemplo, ProDelphi solo almacena un resumen y recuentos totales de todas las llamadas, no puede ver qué llamadas hace un procedimiento específico en un momento específico (o duración de tiempo). Y tiene un gráfico de tiempo, por lo que puede ver cómo la duración de la llamada cambió con el tiempo.

También eche un vistazo a Sampling Profiler de Eric Grange

He estado muy contento con AQtime para perfilar.

Habiendo usado tanto GpProfile como AQTime, he encontrado que ambos son efectivos para encontrar qué método de llamada está causando un cuello de botella.

Sin embargo, AQTime también puede decirme qué línea de código está causando esto, sin realizar ningún cambio en mi código fuente (aunque funciona mejor con depuración TD32 y depuración dcus).

Recientemente lo utilicé para acelerar una rutina en aproximadamente 30x (debido al mal uso de una función de biblioteca interna)

¡Sin embargo, no tuve que pagarlo yo mismo!

Usamos AQTime Pro y estamos contentos con eso. Smartbear lanzó recientemente una edición estándar de AQTime completamente gratuita. La mayoría de las características todavía están allí pero, por supuesto, se han eliminado un poco

Estoy de acuerdo con usted acerca de la interfaz de ProDelphi, pero hace un trabajo lo suficientemente bueno que nos alegra seguir con él. Solo necesitamos hacer un perfil muy ocasionalmente cuando tenemos un problema de rendimiento significativo, y siempre nos ayuda a encontrar el problema rápidamente. Muy buena relación calidad-precio, y Michael parece bastante bueno para mantenerlo actualizado para nuevas versiones.

Una cosa que sugeriría es que porque requiere que se inserte el código, tener todo el código relevante en algún tipo de VCS es invaluable. Cuando necesitamos hacer un perfil, nosotros:

  • Verifique todos los archivos relevantes en
  • Échales un vistazo a todos
  • Hacer los perfiles que necesitamos, entonces
  • Cancele todas las cajas, regresando efectivamente a donde estábamos.

¿Alguien ha probado el componente Profiler en Delphi Area? Es freeware con la fuente y su escritura dice:

Si está buscando una forma fácil y precisa de medir el tiempo de ejecución de su código de forma gratuita, TProfiler es lo que necesita. TProfiler es un componente no visual y de depuración que le permite crear temporizadores con nombre en su código.

Cada temporizador de TProfiler proporciona la siguiente información:

La cantidad de veces que se activó el temporizador (Conteo de aciertos) El tiempo de ejecución total El tiempo promedio de ejecución en cada golpe Tiempo de ejecución en el primer golpe Tiempo de ejecución en el último golpe El golpe con tiempo mínimo de ejecución El golpe con tiempo máximo de ejecución

Es cierto, para crear perfiles extraño a Primoz ‘GpProfile, y no he encontrado un buen reemplazo. Una vez probé AQ Time, pero no estaba muy contento con el precio.

Para rastrear memory leaks y accesos de memoria dudosa, sin embargo, no podría estar más feliz que con FastMM4.

He estado usando ProDelphi durante mucho tiempo y encuentro que satisface mis necesidades.

Pude lograr resultados sorprendentes en las mejoras del rendimiento del sistema mediante el uso de los datos que proporciona.

Para proyectos pequeños, la versión gratuita está bien.

Para proyectos más grandes, necesitará la versión pro (Paga).

Para un generador de perfiles, puede probar SmartInspect desde Gurock Software. Nunca utilicé GpProfile, pero echar un vistazo rápido a su conjunto de características me recordó a SmartInspect. Curiosamente, no pretende ser un generador de perfiles, pero parece ser tanto de uno como GpProfile (a menos que me falta algo). Es compatible con Delphi 2009 y tiene una versión de prueba gratuita y es un poco más barato que AQTime.

Nota : SmartInspect es un registrador en lugar de un generador de perfiles.

El administrador de memoria FastMM4 mencionado en esta respuesta anterior (” Cómo supervisar o visualizar la fragmentación de memoria de una aplicación delphi “) mantiene una lista de todas las asignaciones que pueden consultarse en tiempo de ejecución (y se muestran en una cuadrícula utilizando la aplicación de demostración incluida). No muestra exactamente qué objeto se escapa, ya que las estadísticas son por tamaño de bloque. Pero puede ser útil para el monitoreo a largo plazo de aplicaciones en producción, por ejemplo, servidores o servicios. Actualmente lo estoy integrando en un marco de servidor de aplicaciones web (comercial) como el complemento ‘VisualMM’.