gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-03 15:38:42 24 4
gpt4 key购买 nike

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

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

这不是泄漏!
当我关闭程序时,FastMM(设置为激进)指示没有内存泄漏。请参阅我的回答帖子以获取其他证据,证明这不是泄漏。

我发布东西
许多人告诉我,关闭子窗口只会隐藏它。我知道。我使用“Action:= caFree”来实际释放表单。每个窗体负责释放它所持有的控件。

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

<小时/>

Delphi 7、Win 7 32 位
类似帖子:
Can memory be cleaned up?
When to call SetProcessWorkingSetSize? (Convincing the memory manager to release the memory)

最佳答案

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

关于delphi - 我的程序永远不会释放内存。为什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4463979/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com