Как я могу восстановить память от использования 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 ответ
Это нормальная операция. Менеджеры памяти, как правило, не возвращают память в систему и вместо этого кешируют ее для повторного использования. Кроме того, модули, которые загружаются при первом отображении диалогового окна файла, остаются загруженными в вашем процессе.
Вполне возможно, что система кэширует другие ресурсы для повышения производительности при последующем использовании файловых диалогов.
Такое поведение приводит к лучшей производительности. Если бы вы были в состоянии принудительно вернуть память в систему, ваша программа работала бы медленнее.
Ваш код правильный. Там нет утечки. Там нет проблем для вас, чтобы решить.