2008-11-14 19 views
51

Recientemente me actualicé de Delphi 4 a Delphi 2009. Con Delphi 4 había estado usando GpProfile by Primoz Gabrijelcic como generador de perfiles y Memory Sleuth by 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.Herramientas de análisis de perfiles y memoria para Delphi

El líder en herramientas de Perfilado/Análisis para Delphi por un amplio margen es obviamente AQTime by AutomatedQA. Recientemente, engullieron Memproof by Atanas Soyanov, que entendí que era una herramienta de análisis de memoria excelente y gratuita, e incorporaron su funcionalidad en AQTime. Pero AQ Time es muy costoso para un programador 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 perfiles y análisis de memoria en las versiones actuales de Delphi con las que esté satisfecho y lo recomiende, o debería pagar y pagar mucho para AQ Time?


Addenum: Parece que los primeros que responden están indicando que el gerente FastMM ya incluido en Delphi es muy bueno para encontrar fugas de memoria.

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

Una siento curiosidad por ProDelphi by Michael Adolph es que es menos de una sexta parte del coste 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 su 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 desactive la optimización. Pero lo que desea perfilar es su programa 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 el perfil 20 rutinas, y cuesta la versión pro de menos de $ 100 USD. AQTime cuesta $ 600 USD. Plus 4 para ProDelphi.

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


Addenum 3: Primoz Gabrijelcic está planeando 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. Ver Andre's open source asmprofiler, described below.

+0

Lo siento, solo tengo experiencia con AQTime. –

+0

¿Cree que vale la pena el gasto? – lkessler

+2

Debería probar la demo de tiempo limitado de AQTime. Tuve muchos problemas con él en mi computadora portátil, que está configurado en 120 ppp; algunos cuadros de diálogo en realidad no se podían usar porque se cortaron los botones. Eso no inspiró mucha confianza, y el soporte dijo que no podían hacer nada al respecto ... :-( – mghie

Respuesta

34

Por el precio, no se puede derrotar a FastMM4 como un rastreador de memoria. Es simple de usar pero potente y bien integrado con Delphi.
supongo que usted sabe que, sin descargar, instalar o cambiar nada más, sólo poner esta línea

ReportMemoryLeaksOnShutDown := True; 

cualquier parte del código, permitirá a los informes básicos de pérdidas de memoria.
Si necesita más información sobre bloqueo, EurekaLog es un producto muy bueno que utilizamos. MadExcept también tiene una buena reputación ...

Para perfilar específicamente, tenemos AQTime.

En cuanto a gpProfile, puede intentar y error gabr en SO para una actualización ... o vaya y update gpProfile yourself as it is open source. ;-)

+3

La fuente pública actual está terriblemente desactualizada. Tengo una versión mucho más nueva en mi disco, pero todavía está en estado de "trabajo en progreso" y no soy lo suficientemente valiente como para mostrar ese código roto. Estoy planeando poner GpProfile en el Código de Google tan pronto como esté parcialmente funcionando nuevamente. – gabr

+0

¡Hola, gabr! No sabía que todavía estabas por aquí, y veo que eres especialmente activo en StackOverflow. He usado su GbProfile muy felizmente durante casi 10 años con Delphi 4. Excelente producto, y muy avanzado para el momento. Me encantaría escuchar su respuesta a la pregunta que he publicado aquí. – lkessler

+1

p.s. Gabr: ¡Tu OmniThreadLibrary parece muy interesante! Nunca he intentado enhebrar porque siempre parecía tan complicado, pero tu biblioteca parece hacerlo muy fácil. – lkessler

1

Es verdad, para perfilar echo de menos Primoz 'GpProfile, y no he encontrado un buen reemplazo. Una vez probé AQ Time, pero no estaba muy contento con el precio.

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

+1

Prometo que trabajaré en una nueva versión más difícil! Extraño GpProfile también (y afortunadamente parece que lo necesitaré pronto ...) – gabr

+0

Cualquier noticia en GpProfile? –

2

Para un generador de perfiles puede probar SmartInspect de 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.

+0

Gracias por esa sugerencia. no había oído hablar de SmartInspect antes. Es aproximadamente la mitad del precio de AQTime. – lkessler

+6

SmartInspect es un registrador. No veo cómo se puede comparar esto con un perfilador real. ¿Puedes explicar? –

7

He estado muy contento con AQtime para crear perfiles.

+1

Si tiene la versión Enterprise o Architect de RAD XE, la edición lite de AQT ahora se incluye con Delphi. –

+0

Hace perfiles de memoria y tiempo –

23
+2

Los perfiladores de muestreo nunca lo han hecho por mí, pero gracias por nuestra sugerencia, ya que podría ser útil para algunas personas. – lkessler

+1

El problema es que no muestran suficiente información. Si capturan toda la pila de llamadas, pueden decirle qué instrucciones de llamada le están costando más. Es más importante hacer eso que obtener una alta precisión a partir de una gran cantidad de muestras. –

+2

Es una de las mejores herramientas de muestreo disponibles @ Eric Grange está bien hecho, sigue así – VibeeshanRC

2

Estoy de acuerdo con usted acerca de la interfaz de ProDelphi, pero hace un buen trabajo que estamos felices de estar con ella. 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, ya que requiere que se inserte código, tener todo el código relevante en algún tipo de VCS es invaluable. Cuando necesitamos perfil, le:

  • comprobar todos los archivos pertinentes en
  • Compruebe a todo lo alto
  • hacer la elaboración de perfiles que necesitamos, entonces
  • Cancelar todas las cajas, rodando efectivamente volver a donde estábamos .
+0

Un VCS en mi caso es excesivo. Lo que hago es copiar todo el directorio de trabajo para "copiar" el mismo directorio. Entonces es trivial para mí regresar. De hecho, lo hago por cada cambio significativo que pueda estar haciendo. – lkessler

4

Al haber 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 he utilizado para acelerar una rutina en aproximadamente 30x (debido al mal uso de una función de biblioteca interna)

Sin embargo, no tuvieron que pagar de mi bolsillo!

+1

30x no es inusual si puede obtener un costo a nivel de instrucción. Lo hago a mano, deteniéndome con una tecla de pausa unas cuantas veces y grabando la pila de llamadas. Si una llamada está desperdiciando 29 de 30 ciclos, no necesita 1000 muestras para verla. –

2

Alguien ha intentado the Profiler component at Delphi Area? Es gratuito con fuente y es writeup dice:

Si usted está buscando una manera fácil y manera precisa de medir el tiempo de ejecución de su código de forma gratuita, TProfiler es lo necesitas. 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:

El número de veces que el temporizador fue activado (Cantidad de aciertos) El tiempo total ejecución El promedio de ejecución tiempo en cada tiempo de golpe de ejecución en la el tiempo de ejecución primer éxito en la última golpear el éxito con un tiempo mínimo de ejecución el éxito con el tiempo máximo de ejecución

29

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

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

La razón principal por la que lo hice fue porque me perdí un árbol de llamadas exactas. Por ejemplo, ProDelphi solo almacena un resumen y recuentos totales de todas las llamadas, no se puede ver lo que llama un procedimiento específico en un momento específico (o duración del 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.

+0

¡Gracias por su esfuerzo! ¡Lo comprobaré! –

+3

+1 y funciona con aplicaciones multiproceso – mjn

+0

Se ve muy bien, gracias. –

3

Utilizamos AQTime Pro y estamos contentos con eso. Smartbear ha lanzado recientemente un AQTime standard edition completamente gratis. La mayor parte de las características todavía están allí pero tienen por supuesto removed a bit

0

El administrador de memoria FastMM4 mentioned in this older answer ("Cómo controlar o visualizar la fragmentación de memoria de una aplicación delphi") mantiene una lista de todas las asignaciones de los cuales se pueden consultar en tiempo de ejecución (y se muestra en una cuadrícula con 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'.

1

He estado usando ProDelphi durante mucho tiempo & encuentro que cumple con mis necesidades.

He podido lograr resultados deslumbrantes 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).

Cuestiones relacionadas