Delphi отображение утечки памяти

Проблема: Проверить существование в программе утечек памяти (Memory leek).
Решение: Для решения даной задачи можно воспользоваться различными инструментариями/компонентами. Приведу некоторые из них:

  • EurekaLog
  • FastMM
  • AQTime
  • SafeMM

Конечно можно установить или подключить той или иной компонет к проекту и воспользоваться всеми возможностями, которые поставляются. Но, бываю ситуации когда нужно оперативно определить есть утечка паияти или нет, при этом ничего не настраивая или устанавливая. В таком случае нужно установить глобальную переменную ReportMemoryLeaksOnShutdown := True;. По умолчанию данный параметр выключен. При закрытии приложения, если есть утечки памяти, появится окно с сообщением что «течет», и в каком количестве.  (Рис. 1):

Memory Leek

Рис. 1 Утечка памяти

Использование: Я бы рекомендовал установить параметр ReportMemoryLeaksOnShutdown в исходном коде проекта (dpr файле) .
Для этого нужно в «Project Manager’е» кликнуть правой кнопкой мыши на проект и выбрать пункт «View Source«, после чего должен открыться редактор кода примерно следующего вида (см. ниже). В секции begin..end устанавливаем парамет ReportMemoryLeaksOnShutdown := true:
program FreeObject;

uses
...
{$R *.res}
begin
//Для отображения утечек памяти, если они есть
ReportMemoryLeaksOnShutdown := true;

Application.Initialize;
Application.MainFormOnTaskbar := True;
Application.CreateForm(TMainForm, MainForm);
Application.Run;
end.

Если в вашем приложении есть утечки памяти, они отображаться при закрытии программы. Отображаться только в том случае если вы работали с какими то классами, которые не были удалены после использования.

Диагностику утечек памяти я применил при написании статьи: TStrings и освобождение объектов, исходники проекта лежат тут

Добавить комментарий