Delphi 7.0和内存泄漏?

4

在使用FastMM4清理可能导致内存泄漏的代码后,我们已经在Windows 7上对软件进行了一个月的不间断测试。从任务管理器中可以看到我的软件进程的运行情况如下:

> -CPU started out at 1% and 0%. Now it is bouncing around from 2% to 5%
> -VM usage started out at 11,852KB. Now it is at 4,900kb but bouncing
> around from 4,900kb to 5,000kb.

这是否意味着我们的软件存在内存泄漏问题?我感到困惑和担忧。

提前致谢。


5
对我来说,这似乎没有什么需要担心的。 - David Heffernan
4个回答

4

不,当内存使用量增加并且最终您的应用程序使用了所有可用内存时,您就会出现内存泄漏,并且有理由担心。


4

听起来这是相当正常的内存使用。程序执行需要内存,因此内存使用量会增加。程序完成所需任务并释放内存,内存使用量就会下降。内存泄漏是指内存使用量上升并且持续上升,因为你没有在完成任务后释放内存。

如果你使用FastMM4,就不必寻找可能导致内存泄漏的原因。只需开启完整调试模式和日志记录选项,运行程序,它将找到任何泄漏的内存,并为你编写一个包含类型和堆栈跟踪信息的文件。


1
在发布版本中,您不应该使用完整的调试模式,因为FastMM4需要内存来跟踪所有“分配调用堆栈”。 - Andreas Hausladen

3
即使应用程序看起来运行良好数天,仍可能存在隐藏在不使用(或不经常使用)的代码区域中的内存泄漏。因此,当应用程序的这部分在以后某个时间变得活跃时,它们可能会成为问题。
为确保所有代码都经过泄漏测试,您可以使用带有DUnit的FastMM4进行单元测试,确保尽可能执行多个代码路径。例如,可以使用此开源Delphi工具或最近成为开源Discover来测量单元测试代码覆盖率。
此外,DUnit的主干版本(9.4.0)支持每个测试用例的自动内存泄漏检测(基于FastMM4)。

1

或许考虑一下使用调试器?我了解到你没有使用过它们。我也曾遇到内存泄漏的问题,只是一直没有意识到。现在我使用“警卫”程序检测内存泄漏,对我而言,Deleaker是一个不错的选择。你可以找一个适合你的。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接