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

У меня проблемы с производительностью моего приложения Delphi 2006. Можете ли вы предложить какие-либо инструменты для профилирования, которые помогут мне найти горлышко бутылки?

то есть такой инструмент, как turbo Profiler

prodelphi.de
Gravity 26.02.2018 13:33

Это бесплатное и простое в использовании программное обеспечение (по сравнению с ProDelphi). delphitools.info/downloads/samplingprofiler-changelog

Gravity 26.02.2018 14:50

GpProfiler работает с последней версией Delphi, см .: github.com/ase379/gpprofile2017

Johan 06.11.2018 13:03
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
23
3
11 461
9
Перейти к ответу Данный вопрос помечен как решенный

Ответы 9

www.AutomatedQA.com предлагает лучший выбор для профилирования Delphi (AQTime)

Имейте в виду, что AQA основан на инструментальных средствах, а не на профилировании, и поэтому дает вводящие в заблуждение результаты для очень мелких узких мест.

Barry Kelly 16.12.2008 04:54

s / без профилирования / без выборки /

Barry Kelly 16.12.2008 04:55

Вот еще один вариант, я не использовал его раньше: http://www.prodelphi.de

Окончательный выбор, который я знаю для Delphi, http://gp.17slon.com/gpprofile/index.htm

Последнее замечание: www.torry.net - отличное место для поиска компонентов / инструментов Delphi.

Дариан, вместо того, чтобы добавлять 4 ответа на один вопрос, отредактируйте свой первый ответ, чтобы предоставить всю информацию, и удалите остальные 3.

Jan Goyvaerts 18.12.2008 09:14

В прошлом я успешно использовал http://www.prodelphi.de в проекте Delphi 7. Дешево и работает. Не позволяйте веб-сайту лиги кустарников напугать вас.

Я использую и рекомендую Sampling Profiler, я думаю, вы можете получить его из группы новостей embarcadero.public, вложения.

Сейчас он на delphitools.info

Roman Ganz 21.03.2009 11:47
Ответ принят как подходящий

Я не так давно спрашивал тот же вопрос

Я скачал и попробовал AQtime. Это кажется всеобъемлющим, но это непростой инструмент и ОЧЕНЬ дорогостоящий для отдельного программиста (например, 600 долларов США). Мне понравился тот факт, что он был неинвазивным (не изменял ваш код) и что он мог выполнять построчное профилирование, пока я не обнаружил, что, поскольку это инструментальный профилировщик, он может привести к неправильной оптимизации, как в: Почему CharInSet быстрее, чем оператор Case?

Я попробовал демоверсию ProDelphi, гораздо менее дорогую (я думаю, около 80 долларов), но она была для меня слишком неуклюжей - мне совсем не нравился пользовательский интерфейс, и это агрессивно - изменение кода для добавления инструментов, с которыми вы должны быть осторожны.

Я много лет использовал GpProfile с Delphi 4. Я люблю это. Это тоже было инвазивным, но оно сработало так хорошо, что я научился доверять ему, и за 10 лет у меня никогда не возникало проблем. Но когда я обновился до Delphi 2009, я не подумал, что лучше использовать его, поскольку он не был обновлен и, по признанию врача, не будет работать без модификаций. Я думаю, вы не сможете использовать его и с Delphi 2006.

ProDelphi и GpProfile будут профилировать только на уровне процедуры. Если вы хотите сделать отдельные строки (что мне иногда приходилось делать), вы должны вызывать PROC1, PROC2, PROC3 для каждой строки и помещать одну строку в каждый PROC. Это было немного неприятно, но это дало мне хорошие результаты (по крайней мере, я был доволен результатами, полученными GpProfile).

Ответ, который я принял в своем вопросе CharInSet, гласил, что «профилировщики выборки, которые периодически проверяют расположение ЦП, обычно лучше подходят для измерения времени кода». а более поздний отвечать предоставил Эрику Грейнджу бесплатный профилировщик выборки для Delphi, который теперь поддерживает Delphi 2009. Я еще не пробовал его, но слышал о нем хорошие отзывы, и это следующий, который я собираюсь попробовать.

Кстати, вам может быть лучше сэкономить 600 долларов, НЕ покупая AQtime, а вместо этого используя его для обновления вашего Delphi 2006 до Delphi 2009. Стабильность, скорость и дополнительные функции (особенно Unicode) будут стоить вашего времени. См .: Какие основные стимулы для перехода на D2009 (исключая Unicode)?

Также AQtime еще не интегрируется в Delphi 2009.

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


Примечание: добавление, которое я добавил позже к вопрос 291631, похоже, может быть ответом. См. Программа с открытым исходным кодом Андре: asmprofiler


Последующее сообщение в феврале 2010 г. Я укусил пулю и купил AQTime. Несколько месяцев назад они, наконец, интегрировали его в Delphi 2009, чем я и пользуюсь (но им все еще нужно сделать Delphi 2010). Просмотр исходных строк, их индивидуального времени и подсчета бесценен для меня, и AQTime отлично с этим справляется.

Я почти уверен, что AQTime 6 будет интегрирован с Delphi 2009.

lukeck 16.12.2008 05:18

По состоянию на 15 декабря 2008 г. это не так. Когда мне не удалось загрузить пробную версию для интеграции, я связался с AutomatedQA, и они сказали, что все еще работают над этим. AQTime 6.10 будет работать только с Delphi 2009 как отдельная программа.

lkessler 16.12.2008 06:50

AQTime 6.30 был выпущен в ноябре 2009 года и, наконец, добавил интеграцию с Delphi 2009. Но, конечно, Delphi 2010 уже отсутствует, и нет, у AQTime еще нет интеграции с ним. Может еще год подождать людей D2010.

lkessler 21.12.2009 07:35

Я только что нашел очень хороший бесплатный профилировщик выборки, и он поддерживает Delphi 2009

Также работает с delphi 7 - спасибо за это. Обратите внимание: не забудьте включить отладочную информацию TD32 в параметрах компоновщика.

T.S 13.04.2017 11:14

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

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

Недавно я начал использовать Intel VTune Performance Analyzer. «ВАУ» не подводит итог. Я впечатленный. Я просто не знал, что все это встроено в современные процессоры Intel. Знаете ли вы, что он может точно сказать вам, как часто одна инструкция должна ждать, пока кэш данных L1 не взглянет сбоку на другое ядро, прежде чем перезагрузить слово из более высокого кеша? Если я продолжу писать, я буду звучать как захватывающая дух реклама продукта.

Перейдите на сайт Intel и загрузите полнофункциональную демоверсию с синхронизацией. Покопайтесь в сети и найдите пару видео о том, как начать. (В противном случае вы рискуете попасть в тупик из-за всех параметров.) Он работает с любым компилятором. Просто укажите его на .exe. Он покажет вам исходные строки, если ваш .exe содержит отладочную информацию, и вы укажете ее на исходный код.


Я застрял, пытаясь оптимизировать внутренний цикл, который вызывал написанную мной функцию. Никаких внешних вызовов, кроме длины (str), не было. Этот внутренний цикл выполнялся миллиарды раз за запуск и занимал примерно половину времени процессора - идеальный кандидат для оптимизации. Я пробовал всевозможные стандартные оптимизации, но почти безрезультатно. VTune показывает горячие точки. Я просто углубился, пока он не показал мне ASM, сгенерированный моим кодом, и сколько времени заняло выполнение каждой инструкции.

Вот что сказал мне VTune:

  • line nnnn [line of delphi code] ...
  • addr hhhh cmp byte ptr [edx+ecx],0x14h - - - - - - - - 3 cycles
  • addr hhhh ja label_x - - - - - - - - - - - - - - - - - - -10302 cycles

Абсолютные значения ничего не значат. (Я думаю, что я измерял количество циклов на одну удаленную инструкцию.) Относительные значения дают понять, на что ушло все время. Самым замечательным было окно советов. Он сказал мне, что код застопорился, ожидая загрузки данных в кэш данных L1, и фактически дал мне хороший совет, как избежать остановок.

Моя ошибка заключалась в том, что я думал о Core2 Quad как о действительно быстром процессоре 8086. Нет ^ 3. Код тратил 99% времени на ожидание загрузки данных из памяти, потому что я слишком много прыгал. Мой алгоритм предполагал, что память была RAM (произвольный доступ). Современные процессоры работают не так. Доступ к данным в кэше L1 можно получить за 1 или 2 цикла, но доступ к кешу L2 или L3 стоит от десятков до сотен циклов, а обращение к ОЗУ стоит тысячи. тем не мение, вся эта задержка избегается при последовательном доступе к данным, потому что процессор предварительно загружает в кеш данные, следующие за первым запрашиваемым байтом.

В результате я переписал алгоритм для более последовательного доступа к данным и получил 10-кратное ускорение, что было достаточно хорошо. Когда у меня будет время, я уверен, что смогу получить от него еще 10 раз. Но это всего лишь компьютерщик во мне. Достаточно хорошо.

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

Новый алгоритм принципиально не отличается от старого. Он просто хранит данные таким образом, чтобы к ним можно было получить доступ последовательно. Например, в одном месте я переместил поле из массива записей в его собственный массив целых чисел - потому что внутреннему циклу не нужны остальные данные в каждой записи. У меня также была прямоугольная матрица, хранящаяся как динамический массив динамических массивов. Код использовал это для произвольного доступа к мегабайтам данных (а плохой кеш данных L1 составляет всего 64 КБ). Я понял, как сохранить его в линейном массиве в виде диагоналей матрицы, что является порядком, в котором я использую данные. (Хорошо, может быть, эта часть является радикальная.)

Во всяком случае, меня продают на VTune.

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