Инструменты профилирования и анализа памяти для Delphi

Недавно я обновил Delphi 4 до Delphi 2009. С Delphi 4 я использовал GpProfile от Primoz Gabrijelcic в качестве профилировщика и Memory Sleuth от Turbo Power для анализа памяти и отладки утечек. Оба работали хорошо для меня. Но теперь мне нужны новые инструменты, которые будут работать с Delphi 2009.

Лидером по инструментам профилирования / анализа для Delphi с большим отрывом, очевидно, является AQTime от AutomatedQA. Недавно они даже сожрали Memproof от Атанаса Соянова, который, как я понял, был отличным и свободным инструментом анализа памяти, и включили его функциональность в AQTime. Но AQTime очень дорог для отдельного программиста. Это на самом деле стоит дороже, чем обновление до Delphi 2009!

Итак, мой вопрос: есть ли другие менее дорогие варианты для профилирования и анализа памяти в текущих версиях Delphi, которые вам нравятся и которые вы рекомендуете, или я должен укусить пулю и заплатить большие деньги за AQTime?


Addenum: Кажется, ранние авторы указывают, что менеджер FastMM, уже включенный в Delphi, очень хорош для обнаружения утечек памяти.

Итак, есть ли хорошие альтернативы для профилирования исходного кода?

Один из интересующих меня моментов - это ProDelphi от Michael Adolph, стоимость которого составляет менее одной шестой стоимости AQTime. Вы используете это? Стоит ли платить AQTime в шесть раз больше?


Addenum 2: я скачал пробные версии AQTime и ProDelphi.

Поначалу AQTime был немного ошеломляющим и немного запутанным. Потребовалось несколько часов, чтобы найти некоторые приемы, необходимые для его подключения.

ProDelphi был очень похож на GpProfile, к которому я привык. Но его окна загромождены и сбивают с толку, и это не так хорошо, как GpProfile.

Мне кажутся большие различия:

  1. ProDelphi меняет ваш код. AQTime нет. Изменение кода может повредить ваши данные, если что-то пойдет не так, но мой опыт работы с GpProfile заключался в том, что это никогда не происходило со мной. Плюс один для AQTime.

  2. ProDelphi требует, чтобы вы выключили оптимизацию. Но то, что вы хотите профилировать, это ваша программа с оптимизацией, как она будет работать. Плюс один для AQTime.

  3. ProDelphi может только профилировать до функции или процедуры. AQTime может идти до отдельных строк. Плюс 2 для AQTime.

  4. ProDelphi имеет бесплатную версию, которая будет профилировать 20 подпрограмм, а ее про-версия стоит менее 100 долларов США. AQTime составляет 600 долларов США. Плюс 4 для ProDelphi.

Счет 4-4. Как вы думаете?


Addenum 3: Primoz Gabrijelcic планирует снова запустить GpProfile. Смотрите его комментарии к некоторым ответам ниже. Он на Stackru как gabr.


Addenum 4: Кажется, что, в конце концов, может быть решение для профилирования. См. Андре Ампрофилер с открытым исходным кодом, описанный ниже.

12 ответов

Решение

По цене, вы не можете превзойти FastMM4 в качестве трекера памяти. Это простой в использовании, но мощный и хорошо интегрированный с Delphi.
Я думаю, что вы знаете, что, не загружая, не устанавливая и не изменяя что-либо еще, просто ставьте эту строку

ReportMemoryLeaksOnShutDown := True;

где-нибудь в вашем коде, включит базовые отчеты об утечках памяти.
Если вам нужно больше информации о сбоях, EurekaLog - очень хороший продукт, который мы используем. MadExcept также имеет хорошую репутацию...

Специально для профилирования у нас есть AQTime.

Что касается gpProfile, вы можете попробовать gabr на SO для обновления... или пойти и обновить gpProfile самостоятельно, так как он с открытым исходным кодом.;-)

Я создал профилировщик с открытым исходным кодом для Delphi: http://code.google.com/p/asmprofiler/

Это не идеально, но это бесплатно и с открытым исходным кодом:-).

Основная причина, по которой я это сделал, была в том, что я пропустил точное дерево вызовов. Например, ProDelphi хранит только итоговую и общую информацию о всех вызовах, вы не можете видеть, какие вызовы выполняла определенная процедура в определенное время (или продолжительность). И у него есть временная диаграмма, так что вы можете видеть, как длительность звонка менялась со временем.

Я был очень счастлив с AQtime для профилирования.

Используя и GpProfile, и AQTime, я обнаружил, что оба они эффективны при поиске вызова метода, вызывающего "горлышко бутылки".

Однако AQTime также может сказать мне, какая строка кода вызывает это, не внося никаких изменений в мой исходный код (хотя это лучше всего работает с отладкой TD32 и отладкой dcus).

Недавно я использовал его для ускорения процедуры примерно в 30 раз (из-за неправильного использования функции внутренней библиотеки)

Однако я не должен был платить за это сам!

Мы используем AQTime Pro и довольны этим. Smartbear недавно выпустила совершенно бесплатную стандартную версию AQTime. Большинство функций все еще там, но они, конечно, немного удалены

Я согласен с вами по поводу интерфейса ProDelphi, но он достаточно хорошо работает, и мы будем рады остаться с ним. Нам нужно регистрировать только очень редко, когда у нас есть существенная проблема с производительностью, и это всегда помогало нам найти проблему довольно быстро. Очень хорошее соотношение цены и качества, и Майкл, похоже, неплохо обновляет его для новых версий.

Одна вещь, которую я хотел бы предложить, состоит в том, что, поскольку для этого требуется вставка кода, наличие всего соответствующего кода в какой-либо VCS является бесценным. Когда нам нужно профилировать, мы:

  • Проверьте все соответствующие файлы в
  • Проверьте их все
  • Сделайте профилирование нам нужно, тогда
  • Отмените все проверки, фактически откатившись туда, где мы были.

Кто-нибудь пробовал компонент Profiler в Delphi Area? Это бесплатная программа с исходным кодом, и она написана так:

Если вы ищете простой и точный способ измерить время выполнения вашего кода бесплатно, вам нужен TProfiler. TProfiler - это невизуальный и отладочный компонент, который позволяет вам создавать именованные таймеры в вашем коде.

Каждый таймер TProfiler предоставляет следующую информацию:

Количество раз, когда таймер был активирован (Число посещений) Общее время выполнения Среднее время выполнения при каждом обращении Время выполнения при первом обращении Время выполнения при последнем обращении Удар с минимальным временем исполнения Удар с максимальным временем выполнения

Это правда, для профилирования я скучаю по GpProfile Primoz, и не нашел хорошей замены. Однажды я попробовал AQTime, но не был слишком доволен этим по цене.

Однако, для отслеживания утечек памяти и хитрых обращений к памяти я не мог быть счастливее, чем с FastMM4.

Я давно использую ProDelphi и считаю, что он отвечает моим потребностям.

Я смог добиться потрясающих результатов в улучшении производительности системы, используя предоставленные данные.

Для небольших проектов бесплатная версия подходит.

Для более крупных проектов вам понадобится (Платная) профессиональная версия.

Для профилировщика вы можете попробовать SmartInspect от Gurock Software. Я никогда не использовал GpProfile, но быстрый взгляд на его набор функций напомнил мне SmartInspect. Интересно, что он не претендует на то, чтобы быть профилировщиком, но кажется, что он такой же, как и GpProfile (если я что-то упустил). Он поддерживает Delphi 2009 и имеет бесплатную пробную версию и немного дешевле, чем AQTime.

Примечание. SmartInspect - это средство регистрации, а не профилировщик.

Менеджер памяти FastMM4, упомянутый в этом предыдущем ответе (" Как отслеживать или визуализировать фрагментацию памяти приложения delphi "), хранит список всех выделений, которые могут быть запрошены во время выполнения (и отображен в сетке с использованием включенного демонстрационного приложения). Это не точно показывает, какой объект утечки, так как статистика по размеру блока. Но это может быть полезно для длительного мониторинга приложений в производстве, например серверов или сервисов. В настоящее время я интегрирую его в (коммерческую) инфраструктуру сервера веб-приложений в качестве надстройки "VisualMM".

Другие вопросы по тегам