如何使用TFileOpenDialog回收内存?

时间:2019-02-12 08:31:38

标签: delphi delphi-xe7

在一个简单的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 个答案:

答案 0 :(得分:3)

这是正常操作。内存管理器通常不将内存返回给系统,而是将其缓存起来供以后重复使用。此外,第一次显示文件对话框时加载的模块仍在您的进程中加载​​。

系统完全有可能缓存其他资源以提高性能,以供以后使用文件对话框使用。

此行为导致更好的性能。如果您能够强制将内存返回给系统,则您的程序将执行得更慢。

您的代码正确。没有泄漏。您没有问题可以解决。