Мониторинг использования памяти в приложении Delphi

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

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

Вот что я пробовал:

  1. ReportMemoryLeaksOnShutdown:= Верно в моем основном файле проекта, но ничего не возвращает. Таким образом, либо он не отслеживает утечку памяти в пакетах, которые загружаются динамически, либо память освобождается до закрытия приложения.
  2. AQTime. Предполагается, что это будет очень вау продукт, но я нахожу его совершенно не впечатляющим. Если я использую профилировщик распределения, я получаю сотни строк, не содержащих ничего полезного. Просто адрес памяти, размер и что-то вроде «стандартного распределения VCL». Предположительно, он разбивает информацию по рутине, но я просто получаю плоский список без какой-либо рутинной информации. Так что я не думаю, что это работает.

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

8
задан menjaraz 22 December 2011 в 18:43
поделиться