我的程序永远不会释放内存.为什么?

WeG*_*ars 3 delphi

我有一个MDI计划.当它启动时需要2-3MB的RAM.然后,在这个程序中,我创建了大约260个MDI子窗口(每个窗口都有一个TStringGrid,一个位图和一些其他控件)并显示一些数据.该应用程序需要大约500MB来加载所有这些窗口.如果我手动关闭每个MDI子项,应用程序仍然使用160MB的RAM.为什么它不会返回几MB的RAM?我应该担心吗?对于只有1GB或RAM的系统来说,这是160MB!

注意:我使用任务管理器中的WORKING SET列来查看RAM统计信息.也许我需要一个更好的工具来读取RAM利用率.(私人工作集只比工作集小一点).

这不是泄漏!
FastMM(设置为激进)表示关闭程序时没有内存泄漏.有关其不是泄漏的其他证据,请参阅我的答案帖子.

我释放的东西
许多人告诉我,关闭一个儿童窗口只能隐藏它.我知道.我使用"Action:= caFree"来实际发布表单.每个表单都负责释放它所拥有的控件.

回答
我发现FastMM对此负有责任.请参阅我在下面发布的答案.


Delphi 7,Win 7 32位
类似帖子:
可以清理内存吗?
何时调用SetProcessWorkingSetSize?(说服内存管理器释放内存)

Eug*_*its 7

任务管理器不是检测内存泄漏的正确工具.Delphi会分配大块内存并在以后保留以供将来使用,因此即使在释放所有资源后,预计也会增加分配的内存.只有使用专门的内存分析工具才能获得任何其他结果(以及更详细的答案).AQTime是第一个想到的,或者如果你能找到旧的但有用的MemProof,它会对你有所帮助(MemProof是免费的,对于内存分析来说它比AQTime更方便).