Как я могу восстановить память от использования TFileOpenDialog?

В простом приложении Delphi VCL с одной кнопкой на форме и следующим кодом события OnButton:

procedure TForm1.Button1Click(Sender: TObject);
var
  OpenDialog : TFileOpenDialog;
begin
  OpenDialog := TFileOpenDialog.Create(nil);
  try
    OpenDialog.Options := OpenDialog.Options + [fdoPickFolders];
    if not OpenDialog.Execute then
      exit;
  finally
    OpenDialog.Free;
  end;
end;

Когда я запускаю диалоговое окно, потребление памяти моим приложением увеличивается более чем вдвое, но после OpenDialog.Free эта память не освобождается.(Я использую ProcessExplorer, чтобы увидеть, сколько памяти использует мое приложение)

Как я могу сделать так, чтобы после освобождения объекта мое использование памяти вернулось к тому, что было до того, как я вызвал диалог?

1 ответ

Решение

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

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

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

Ваш код правильный. Там нет утечки. Там нет проблем для вас, чтобы решить.

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