在一个简单的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查看我的应用程序正在使用多少内存)
如何做到这一点,以便在释放对象之后,我的内存使用率恢复到调用对话框之前的状态?
答案 0 :(得分:3)
这是正常操作。内存管理器通常不将内存返回给系统,而是将其缓存起来供以后重复使用。此外,第一次显示文件对话框时加载的模块仍在您的进程中加载。
系统完全有可能缓存其他资源以提高性能,以供以后使用文件对话框使用。
此行为导致更好的性能。如果您能够强制将内存返回给系统,则您的程序将执行得更慢。
您的代码正确。没有泄漏。您没有问题可以解决。