Профилировщик может начать профилирование при выполнении какой-либо процедуры - PullRequest
3 голосов
/ 20 декабря 2009

Я просмотрел и прочитал много вопросов / ответов о профилировщиках в StackOverflow, но все еще есть еще один вопрос, на который я не нашел ответа.

Я уже давно использую TurboPowers Memory Sleuth с Delphi 7 и до сих пор очень рад этому.

Однако я планирую перейти на Delphi 2010 и подозреваю, что эта программа больше не будет работать. Поэтому мне нужно найти замену.

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

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

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

Кто-нибудь может подсказать, какой из профилировщиков, которые в настоящее время существуют (и поддерживаются), может сделать это для меня?

Ответы [ 4 ]

4 голосов
/ 20 декабря 2009

Коммерчески есть AQTime от AutomatedQA , это довольно богатый набор функций. Он может делать то, что вы просите.

3 голосов
/ 20 декабря 2009

Взгляните на Sampling Profiler . Это не совсем так просто, как вы описали, но это очень хороший инструмент, и вы можете включать и выключать профилирование для отдельных процедур с помощью вызова OutputDebugString. Я думаю, что это так же хорошо, как вы получите без Embarcadero, пишущего профилировщик.

2 голосов
/ 21 декабря 2009

Для поиска утечек памяти лучше всего подойдет что-то вроде AQTime. Для нахождения проблем со скоростью, вы рассматривали простой метод стеков? Это низкотехнологичный, но эффективный. Вот объяснение.

2 голосов
/ 21 декабря 2009

AQTime определенно может это сделать. Вы можете выбрать любые модули, которые вы хотите включить. Но если вы собираетесь в Delphi 2010, они еще не интегрированы в IDE. Фактически, всего несколько недель назад они наконец получили свою интеграцию с Delphi 2009 - через год после выпуска D2009, и, судя по моему первоначальному взгляду, она глючит.

AQTime также ОЧЕНЬ дорогой за 600 долларов. Если вы сделаете это, купите, если у у одного из их партнеров , где вы можете сэкономить деньги (например, Falafel предлагает их за 500 долларов вместо 600 долларов). {Вот моя личная напыщенная речь: это ужасная политика, которая меня отключает. Вы не должны платить больше, когда вы покупаете напрямую у продавца. Они должны либо заставить своих партнеров продавать по той же цене и дать им процент, либо они вообще не должны предлагать его на своем собственном сайте, а просто перечисляют партнеров, у которых вы можете его купить.}

Но даже с учетом этих проблем, AQTime - единственный инструмент, который я обнаружил, который прекрасно работает, предоставляя вам построчное подсчет выполнения и тайминги. Это конечный результат, который он дает, и он стоит того, и после многих вопросов и ответов, которые я дал в StackOverflow за последний год, я могу просто закончить с ними (теперь я в третьем испытании, когда они добавлена ​​интеграция с D2009).

Мои основные вопросы:

И я попытался ответить на:

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

Я также попробовал Sampling Profiler. Это просто не сработало для меня. Казалось, что 90% результатов, к которым он пришел, были в Системных подпрограммах, где строковые копии и ходы занимали большинство. Это не помогло мне. Мне нужно было знать, какие строки в моих подпрограммах вызывали эти шаги и копии.

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

p.s. В отношении микрооптимизации говорят, что не стоит полагаться на AQTime. Сейчас я провел большое количество тестов, и меня все больше впечатляет помощь AQTime, а также информация на уровне строк, помогающая найти места для микрооптимизации. Это само по себе делает продукт стоящим.

Если информация об уровне строки будет добавлена ​​в asmprofiler, то эта информация станет легкой задачей.

Но разве было бы неплохо, если бы Embarcadero наконец решил добавить встроенный профилировщик прямо в Delphi ? Пока я пишу это, он на 10-м месте в Delphi UserVoice. Проголосуйте, чтобы подняться!

...