我有一个MDI程序。启动时需要2-3MB的RAM。然后,在程序中我创建了大约260个MDI子窗口(每个窗口都有一个TStringGrid、一个位图和一些其他控件)并显示一些数据。加载所有这些窗口需要大约500MB。如果我手动关闭每个MDI子窗口,应用程序仍然使用160MB的RAM。为什么它不返回到几MB的RAM?我应该担心吗?160MB对于只有1GB RAM的系统来说太多了!注意:我使用任务管理器中的“工作集”列来查看RAM统计信息。也许我需要一个更好的工具来读取RAM利用率。(私有工作集比工作集略小。)这不是泄漏!当我关闭程序时,FastMM(设置为侵略性)没有显示出内存泄漏。请参阅我的答案帖子以获取额外证据证明这不是泄漏。我释放东西。许多人告诉我关闭子窗口只是隐藏它。我知道。我使用“Action:= caFree”来实际释放表单。每个表单负责释放它所持有的控件。
答案
我发现这是由FastMM引起的。请参见我下面发布的答案。
Delphi 7,Win 7 32位
类似帖子:
可以清理内存吗?
何时调用SetProcessWorkingSetSize?(说服内存管理器释放内存)