Вам нужен профилировщик, но даже этого будет недостаточно во многих местах и случаях. Кроме того, в вашем случае вам понадобится полнофункциональный AQTime, а не облегченная версия, которая поставляется с Delphi XE и XE2. (AQTIME очень дорогой и раздражающе блокируемый узлом, так что не думайте, что я - дурак для программного обеспечения SmartBear.)
Дело в том, что люди часто ошибочно принимают AQTime Allocation Profiler за способ обнаружения утечек. Он также может сказать вам, куда уходит ваша память, по крайней мере, в рамках инструмента. Работая и занимая много памяти, я нажимаю «Выполнить» -> «Получить результаты».
Вот одно из моих приложений, работающих в AQTime с профилем Allocation Profiler, показывающим, какой именно класс выделяет, сколько экземпляров в куче и сколько памяти они используют. Поскольку вы сообщаете о низком уровне использования кучи Delphi с помощью FastMM, это говорит о том, что большая часть возможностей AQTime для анализа по имени класса delphi также будет бесполезна для вас. Однако, используя события и триггеры AQTime, вы сможете определить, какие области вашего приложения вызывают «затраты на использование памяти», а когда это происходит, каковы затраты. Инструментарий AQTime в реальном времени может быть достаточным, чтобы помочь вам сузить причину, даже если он может не определить, какой вызов функции вызывает наибольшее использование памяти автоматически.
Имена столбцов включают «Имя объекта», которое включает в себя такие вещи:
* Все классы Delphi, их количество экземпляров и использование кучи.
* Блоки виртуальной памяти, выделенные через вызовы Win32.
Он может определять выделение библиотек Delphi и C / C ++ в куче и может видеть определенные выделения памяти уровня Windows-API.
Обратите внимание на количество объектов в реальном времени, объем памяти из используемой кучи.
Обычно я пытаюсь определить стоимость памяти для конкретной операции, измеряя использование памяти кучи до и сразу после некоторой дорогостоящей операции, но до очистки (освобождения) памяти от этой дорогой операции. Я могу установить точки событий внутри AQTime, и когда для конкретного метода будет применен метод или у меня включен флаг, я могу измерять значения до и после, а затем сравнивать их.
Один FastMM не может даже обнаружить не-delphi-распределение или выделение из кучи, которая не управляется FastMM. AQTime не ограничивается этим.