在使用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.
这是否意味着我们的软件有内存泄漏?我很困惑,很担心。
提前致谢
这听起来很正常的内存使用。程序做了一些需要内存的事情,内存使用量就上升了。程序完成了它正在做的事情并释放了内存,内存使用量又下降了。内存泄漏是指内存使用量上升,而使继续上升,因为在使用完内存后没有释放内存。
如果你有FastMM4,你不应该到处寻找可能导致内存泄漏的东西。只要打开全调试模式和日志记录选项,它就会在你运行它时发现任何内存泄漏,并为你写一个包含类型和堆栈跟踪的文件。
不,当内存使用上升并且最终应用程序使用了所有可用内存时,您就有内存泄漏并且有理由担心。
即使一个应用程序似乎可以正常运行几天,仍然可能存在内存泄漏隐藏在代码区域,这些代码区域不被(或不经常)使用。因此,当应用程序的这一部分在一段时间后变得活跃时,它们可能会成为一个问题。
为了确保所有代码都经过泄漏测试,您可以使用带有单元测试的FastMM4(使用DUnit),确保执行尽可能多的代码路径。单元测试代码覆盖率可以测量,例如使用这个开源Delphi工具,或者最近成为开源的Discover。
此外,主干版本(9.4.0)中的DUnit支持每个测试用例的自动内存泄漏检测(基于FastMM4)。
是否值得调试器思考?我知道你不使用它们。我还遇到了内存泄漏的问题。我只是没有想到。现在使用泄密的"守护者"——对我来说,它变成了deleaker。你可以看起来像这样,这会让你满意的。