Я недавно обновился с Delphi 4 до Delphi 2009. В Delphi 4 я использовал GpProfile - Примоз Габриелчич в качестве профилировщика и Сыщик памяти от Turbo Power для анализа памяти и устранения утечек. Оба хорошо работали для меня. Но теперь мне нужны новые инструменты, которые будут работать с Delphi 2009.
Лидером в инструментах профилирования / анализа для Delphi с большим отрывом, очевидно, является AQTime от AutomatedQA. Недавно они даже сожрали Memproof Атанаса Соянова, который, как я понял, был отличным и бесплатным инструментом для анализа памяти, и включили его функциональность в AQTime. Но AQTime очень дорог для индивидуального программиста. На самом деле это стоит больше, чем стоимость обновления до Delphi 2009!
Итак, мой вопрос: есть ли другие менее дорогие варианты профилирования и анализа памяти в текущих версиях Delphi, которые вам нравятся и которые вы рекомендуете, или я должен стиснуть зубы и заплатить большие деньги за AQTime?
Добавление: похоже, первые ответчики указывают, что менеджер FastMM, уже включенный в Delphi, очень хорош для поиска утечек памяти.
Итак, есть ли хорошие альтернативы профилированию исходного кода?
Мне любопытно, что ProDelphi Майкла Адольфа составляет менее одной шестой стоимости AQTime. Вы им пользуетесь? Стоит ли платить за AQTime в шесть раз больше?
Приложение 2: Я скачал пробные версии AQTime и ProDelphi.
Поначалу AQTime был немного ошеломляющим и немного запутанным. Потребовалось несколько часов, чтобы найти некоторые уловки, необходимые для его подключения.
ProDelphi был очень похож на GpProfile, к которому я привык. Но его окна загромождены и сбивают с толку, и он не так хорош, как GpProfile.
Мне кажется, что большие различия заключаются в следующем:
ProDelphi изменяет ваш код. AQTime этого не делает. Изменение кода может повредить ваши данные, если что-то пойдет не так, но мой опыт работы с GpProfile показал, что со мной этого никогда не случалось. Плюс один для AQTime.
ProDelphi требует, чтобы вы отключили оптимизацию. Но то, что вы хотите профилировать, - это ваша программа с включенной оптимизацией, способ ее выполнения. Плюс один для AQTime.
ProDelphi может профилировать только функцию или процедуру. AQTime может сводиться к отдельным строкам. Плюс 2 для AQTime.
У ProDelphi есть бесплатная версия, которая профилирует 20 подпрограмм, а ее профессиональная версия стоит менее 100 долларов США. AQTime стоит 600 долларов США. Плюс 4 для ProDelphi.
Счет изменился на 4-4. Что вы думаете?
Приложение 3: Примоз Габриелчич планирует снова запустить GpProfile. См. Его комментарии к некоторым ответам ниже. Он на StackOverflow как Габр.
Приложение 4: Похоже, что все-таки может быть профилировщик. См. Asmprofiler с открытым исходным кодом Андре, описанный ниже.
Считаете ли вы, что это того стоит?
Вам следует попробовать ограниченную по времени демонстрацию AQTime. У меня было много проблем с этим на моем ноутбуке, который установлен на 120 DPI - некоторые диалоги были фактически непригодны для использования, потому что кнопки были отрезаны. Это не внушало особого доверия, и служба поддержки сказала, что ничего не может с этим поделать ... :-(
AQTime вызывал у меня некоторые странные проблемы после того, как он был автоматически установлен с Delphi XE2 Update 4. Мне пришлось удалить AQTime, чтобы иметь возможность использовать самые простые функции Delphi, такие как «Полный класс в курсоре», не работало, пока я не удалил AQTime .
Это бесплатное и простое в использовании программное обеспечение (по сравнению с ProDelphi). Это также сводится к точности кода строки. Но я сомневаюсь, что результаты в этом случае точны. delphitools.info/downloads/samplingprofiler-changelog





Это правда, по профилированию я скучаю по GpProfile Primoz, и не нашел хорошей замены. Однажды я попробовал AQTime, но он мне не понравился за такую цену.
Однако для отслеживания утечек памяти и сомнительных обращений к ней я не мог быть более счастливым, чем я с FastMM4.
Обещаю, я буду усерднее работать над новым релизом! Я тоже скучаю по GpProfile (и, к счастью, он мне скоро понадобится ...)
В качестве профилировщика вы можете попробовать SmartInspect от Gurock Software. Я никогда не использовал GpProfile, но быстрый взгляд на его набор функций напомнил мне SmartInspect. Интересно, что он не претендует на роль профилировщика, но, похоже, он такой же, как и GpProfile (если я чего-то не упускаю). Он поддерживает Delphi 2009, имеет бесплатную пробную версию и немного дешевле, чем AQTime.
Примечание: SmartInspect - это регистратор, а не профилировщик.
Спасибо за это предложение. Раньше я не слышал о SmartInspect. Это примерно половина стоимости AQTime.
SmartInspect - это регистратор. Я не понимаю, как это можно сравнить с настоящим профилировщиком. Вы можете объяснить?
Я очень доволен AQtime для профилирования.
Если у вас есть версия RAD XE Enterprise или Architect, версия AQTime lite теперь включена в Delphi.
Он выполняет профилирование памяти и времени
По цене вы не можете превзойти FastMM4 в качестве трекера памяти. Он прост в использовании, но мощный и хорошо интегрирован с Delphi.
Я предполагаю, что вы знаете, что, не скачивая, не устанавливая и не меняя ничего другого, просто поместите эту строку
ReportMemoryLeaksOnShutDown := True;
в любом месте вашего кода, это позволит создавать базовые отчеты об утечках памяти. Если вам нужна дополнительная информация о сбоях, EurekaLog - очень хороший продукт, который мы используем. MadExcept тоже имеет хорошую репутацию ...
В частности, для профилирования у нас есть AQTime.
Что касается gpProfile, вы можете попробовать и исправить габр на SO для обновления ... или пойти и обновите gpProfile самостоятельно, так как это открытый исходный код. ;-)
Текущий общедоступный источник ужасно устарел. У меня на диске гораздо более новая версия, но она все еще находится в состоянии «незавершенная работа», и мне не хватает смелости отображать такой неработающий код. Я планирую разместить GpProfile в Google Code, как только он, по крайней мере, частично снова заработает.
Привет габр! Не знал, что вы все еще здесь, и я вижу, что вы особенно активны в StackOverflow. Я очень успешно использовал ваш GbProfile в течение почти 10 лет с Delphi 4. Отличный продукт и очень продвинутый для того времени. Мне нравится слышать ваш ответ на вопрос, который я разместил здесь.
p.s. Габр: Ваша OmniThreadLibrary выглядит очень интересно! Я никогда не пробовал использовать потоки, потому что это всегда выглядело таким сложным, но ваша библиотека, похоже, упрощает это.
В ответе есть небольшая орфографическая ошибка. «ReportMemoryLeakOnShutdown» следует читать «ReportMemoryLeaksOnShutdown» (по крайней мере, в D2010).
@conciliator. Верно! В D2007 тоже. Я исправил опечатку. Спасибо.
исходный код gpProfiler больше не доступен по этой ссылке.
Также взгляните на Профайлер выборки Эрика Грейнджа
Профилировщики выборки никогда не делали этого для меня, но спасибо за наше предложение, так как оно может быть полезно для некоторых людей.
Проблема в том, что они не набирают достаточно информации. Если они захватят весь стек вызовов, они могут сказать вам, какие инструкции по вызову стоят вам больше всего. Это важнее, чем получение высокой точности на действительно большом количестве образцов.
Это один из лучших доступных инструментов для отбора проб. @ Эрик Грейндж молодец, так держать
Я согласен с вами насчет интерфейса ProDelphi, но он выполняет достаточно хорошую работу, и мы рады остаться с ним. Нам нужно профилировать только время от времени, когда у нас есть серьезные проблемы с производительностью, и это всегда помогало нам довольно быстро найти проблему. Очень хорошее соотношение цены и качества, и Майкл, кажется, неплохо держит его в курсе новых версий.
Я бы предложил одну вещь: поскольку для этого действительно требуется вставка кода, наличие всего соответствующего кода в какой-либо VCS бесценно. Когда нам нужно профилировать, мы:
VCS в моем случае излишний. Что я делаю, так это копирую весь свой рабочий каталог в «копию» того же каталога. Тогда возвращаться для меня - тривиальная задача. На самом деле я делаю это для каждого значительного изменения, которое я мог бы сделать.
Используя как GpProfile, так и AQTime, я обнаружил, что оба они эффективны для определения того, какой вызов метода вызывает узкое место.
Однако AQTime также может сказать мне, какая строка кода вызывает это, не внося никаких изменений в мой исходный код (хотя он лучше всего работает с отладкой TD32 и отладкой dcus).
Недавно я использовал его, чтобы ускорить процедуру примерно в 30 раз (из-за плохого использования внутренней библиотечной функции)
Однако мне не пришлось за это платить самому!
30х нет ничего необычного, если вы можете получить стоимость на уровне обучения. Я делаю это вручную, несколько раз останавливаясь с помощью клавиши паузы и записывая стек вызовов. Если какой-то вызов тратит 29 циклов из 30, вам не нужно 1000 сэмплов, чтобы его увидеть.
Кто-нибудь пробовал компонент Profiler в Delphi Area? Это бесплатное программное обеспечение с исходным кодом, и в нем говорится:
If you are looking for an easy and accurate way to measure execution time of your code for free, TProfiler is what you need. TProfiler is a non-visual and debugging component that enables you to create named timers in your code.
Each timer of TProfiler provides the following information:
The number of times that the timer was activated (Hit Count) The total execution time The average execution time on each hit Execution time on the first hit Execution time on the last hit The hit with minimum execution time The hit with maximum execution time
Я сделал профилировщик с открытым исходным кодом для Delphi: http://code.google.com/p/asmprofiler/
Это не идеально, но это бесплатно и с открытым исходным кодом :-).
Основная причина, по которой я это сделал, заключалась в том, что я пропустил точное дерево вызовов. Например, ProDelphi хранит только сводку и общее количество всех вызовов, вы не можете видеть, что вызывает конкретная процедура в определенное время (или время продолжительность). И у него есть временная диаграмма, поэтому вы можете видеть, как продолжительность разговора менялась с течением времени.
Спасибо за ваши усилия! Я проверю это!
+1 и работает с многопоточными приложениями
Мы используем AQTime Pro и довольны им. Smartbear недавно выпустили совершенно бесплатный Стандартная версия AQTime. Большинство функций все еще есть, но, конечно, у них есть удалил немного
Две связанные здесь страницы были удалены и теперь перенаправляются на AQtime Pro. Похоже, Standard Edition больше не доступен (и больше не входит в комплект RAD Studio). Вот страница о бесплатной версии, включенной в более ранние версии RAD Studio: support.smartbear.com/more-info/aqtime/…
Диспетчер памяти FastMM4 упомянутый в этом более старом ответе («Как отслеживать или визуализировать фрагментацию памяти приложения delphi») хранит список всех выделений, которые могут быть запрошены во время выполнения (и отображены в сетке с использованием прилагаемого демонстрационного приложения). Он не показывает точно, какой объект протекает, поскольку статистика дана по размеру блока. Но он может быть полезен для длительного мониторинга приложений в производстве, например серверов или сервисов. В настоящее время я интегрирую его в (коммерческую) структуру сервера веб-приложений в качестве надстройки VisualMM.
Я использую ProDelphi в течение долгого времени и считаю, что он отвечает моим потребностям.
Я смог добиться потрясающих результатов в улучшении производительности системы, используя данные, которые она предоставляет.
Для небольших проектов подойдет бесплатная версия.
Для более крупных проектов вам понадобится (Платная) профессиональная версия.
Извините, у меня только опыт работы с AQTime.