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

51

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

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

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


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

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

Мне любопытно, что ProDelphi by Michael Adolph, что составляет менее одной шестой стоимости AQTime. Вы используете его? Стоит ли AQTime платить в шесть раз больше?


Addenum 2: я загрузил пробные версии AQTime и ProDelphi.

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

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

Мне видны большие различия:

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

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

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

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

Теперь счет 4-4. Как вы думаете?


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


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

  • 0
    Извините, у меня есть только опыт работы с AQTime.
  • 0
    Вы чувствуете, что это стоит затрат?
Показать ещё 3 комментария
Теги:
memory-leaks
profiling

12 ответов

36
Лучший ответ

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

ReportMemoryLeaksOnShutDown := True;

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

Для профилирования, у нас есть AQTime.

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

  • 3
    Нынешний публичный источник ужасно устарел. У меня на диске гораздо более новая версия, но она все еще находится в состоянии «в процессе», и у меня недостаточно смелости для отображения такого испорченного кода. Я планирую поместить GpProfile в код Google, как только он снова будет работать частично.
  • 0
    Привет Габр! Не знал, что вы все еще были рядом, и я вижу, что вы особенно активны в StackOverflow. Я очень счастливо использовал ваш GbProfile в течение почти 10 лет с Delphi 4. Отличный продукт, и очень продвинутый для того времени. Мне очень нравится слышать ваш ответ на вопрос, который я разместил здесь.
Показать ещё 5 комментариев
31

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

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

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

  • 0
    Спасибо за ваши усилия! Я проверю это!
  • 3
    +1 и работает с многопоточными приложениями
Показать ещё 1 комментарий
23

Также рассмотрите Eric Grange Sampling Profiler

  • 2
    Профилировщики выборки никогда не делали это для меня, но спасибо за наше предложение, так как это может быть полезно для некоторых людей.
  • 1
    Проблема в том, что они не дают достаточно информации. Если они захватывают весь стек вызовов, они могут сказать вам, какие инструкции вызова стоят вам больше всего. Это важнее, чем получать высокую точность от действительно большого количества образцов.
Показать ещё 1 комментарий
7

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

  • 1
    Если у вас есть версия RAD XE для предприятий или архитекторов, версия AQTime lite теперь включена в Delphi.
  • 0
    Это делает и Профилирование Памяти и Времени
4

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

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

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

Однако мне не пришлось платить за это сам!

  • 1
    30x не является необычным, если вы можете получить стоимость уровня обучения. Я делаю это вручную, останавливая несколько раз клавишу паузы и записывая стек вызовов. Если какой-то вызов тратит 29 из 30 циклов, вам не нужно 1000 образцов, чтобы увидеть его.
3

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

  • 0
    Две страницы, на которые есть ссылки, были удалены и теперь перенаправлены на AQtime Pro. Похоже, что Standard Edition больше не доступен (и больше не входит в комплект RAD Studio). Вот страница о бесплатной версии, включенной в более ранние версии RAD Studio: support.smartbear.com/more-info/aqtime/…
2

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

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

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

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

2

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

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

  • Проверьте все соответствующие файлы в
  • Проверьте их все
  • Профилирование нам нужно, затем
  • Отмените все проверки, эффективно откатываясь туда, где мы были.
  • 0
    А VCS в моем случае это излишне. Я копирую весь свой рабочий каталог в «копию» того же каталога. Тогда для меня тривиально вернуться. Я фактически делаю это для каждого существенного изменения, которое я мог бы сделать.
1

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

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

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

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

1

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

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

  • 0
    Спасибо за это предложение. Я не слышал о SmartInspect раньше. Это примерно половина цены AQTime.
  • 8
    SmartInspect - это логгер. Я не понимаю, как это можно сравнить с настоящим профилировщиком. Вы можете объяснить?
1

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

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

  • 1
    Обещаю, я буду работать над новым выпуском сложнее! Я тоже скучаю по GpProfile (и, к счастью, скоро он мне понадобится ...)
  • 0
    Есть новости о GpProfile?
0

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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню