【发布时间】:2009-02-04 01:37:36
【问题描述】:
这要么简单得可笑,要么太复杂。 . . .
在我们的应用程序中,有一个表单可以从数据库中加载一些数据并将其显示在网格中(简单地说)。刷新数据时,总内存使用量增加了大约 50K(毫无疑问取决于显示的数据量)。听起来像是内存泄漏,但是当我们关闭应用程序时,FastMM 设置为 ReportMemoryLeakOnShutDown := True,并且它不会报告任何异常的内存泄漏。
看来我们有一个记忆泡泡或记忆袋。每次运行时都会积累更多内存的东西。就像一个 TList 不断向其中添加新项目,但旧的永远不会被删除。然后在关闭过程中,所有项目都被销毁。网格中显示的行数并没有增加,但在幕后有很多对象列表使这项工作发挥作用,所以它可以在任何地方。
所以我的问题是,是否有人知道找出应用程序的哪些部分正在使用多少内存的好技巧。 . . .我可以想出很多乏味的方法(我正在这样做 - 检查我能找到的每个列表),所以我希望有人有我没有想到的技巧或技术。
提前致谢!
更新:每次刷新都会额外使用 10-50K 的内存。用户报告说应用程序最终会停止响应。它确实像内存泄漏,但 FastMM(内存管理器)没有看到任何泄漏。我会尝试一些其他的记忆工具。 . .
【问题讨论】:
-
“停止响应”部分使它听起来好像是一个 TList 或 TObjectList ,其 OwnObjects = True 不断增长,并且使用了 IndexOf 或类似的东西。你可能错过了一个清单。清除某处.....