Как я могу восстановить память от использования TFileOpenDialog? - PullRequest
0 голосов
/ 12 февраля 2019

В простом приложении 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;

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

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

1 Ответ

0 голосов
/ 12 февраля 2019

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

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

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

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

...