如何通过使用 TFileOpenDialog 回收内存?
How can I reclaim memory from using 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 查看我的应用程序使用了多少内存)
我怎样才能使我释放对象后我的内存使用 returns 恢复到调用对话框之前的状态?
这是正常操作。内存管理器通常不会 return 内存到系统,而是将其缓存以备后用。此外,第一次显示文件对话框时加载的模块会在您的进程中保持加载状态。
完全有可能是系统缓存了其他资源,以提高后续使用文件对话框的性能。
此行为可带来更好的性能。如果您能够强制将内存returned 到系统,您的程序将执行得更慢。
您的代码是正确的。没有泄漏。没有问题要你解决。
在一个简单的 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 查看我的应用程序使用了多少内存)
我怎样才能使我释放对象后我的内存使用 returns 恢复到调用对话框之前的状态?
这是正常操作。内存管理器通常不会 return 内存到系统,而是将其缓存以备后用。此外,第一次显示文件对话框时加载的模块会在您的进程中保持加载状态。
完全有可能是系统缓存了其他资源,以提高后续使用文件对话框的性能。
此行为可带来更好的性能。如果您能够强制将内存returned 到系统,您的程序将执行得更慢。
您的代码是正确的。没有泄漏。没有问题要你解决。