4

在花时间使用 FastMM4 清除任何可能导致 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.

这是否意味着我们的软件存在内存泄漏?我很困惑和担心。

提前致谢,

4

4 回答 4

4

不,当内存使用量上升并且最终您的应用程序使用了所有可用内存时,您就有内存泄漏和担心的理由。

于 2011-04-14T15:48:45.700 回答
4

这听起来很正常的内存使用。程序做了一些需要内存的事情,内存使用率上升。程序完成它正在做的事情并释放内存,然后内存使用量又下降了。内存泄漏是指内存使用量上升并持续上升,因为一旦你完成它就没有释放内存。

如果你有 FastMM4,你不应该到处寻找可能导致内存泄漏的东西。只需打开完全调试模式和日志记录选项,它就会在您运行它时找到任何泄漏的内存,并为您写出一个包含类型和堆栈跟踪的文件。

于 2011-04-14T16:06:01.777 回答
3

即使应用程序似乎运行了好几天,仍然可能隐藏在不(或不经常)使用的代码区域中的内存泄漏。因此,当应用程序的这一部分在一段时间后变为活动状态时,它们可能会成为问题。

为确保所有代码都经过泄漏测试,您可以将 FastMM4 与单元测试一起使用(使用DUnit),确保执行尽可能多的代码路径。例如,可以使用这个开源 Delphi 工具或最近成为开源的Discover来测量单元测试代码覆盖率。

此外,trunk 版本(9.4.0)中的 DUnit 支持对每个测试用例进行自动内存泄漏检测(基于 FastMM4)。

于 2011-04-14T19:37:49.293 回答
1

可能值得考虑调试器?我知道你不使用它们。我也有内存泄漏的问题。我只是没有猜到它。现在使用泄漏的“守护者” - 对我来说它变得更容易。你可以看起来这样一个,那会让你高兴的。

于 2011-11-22T19:09:29.600 回答