2015-09-04 25 views
2

ReportMemoryLeaksOnShutdown = true在我的Delphi XE应用程序中。在我的Win7电脑上,我看到关闭时没有内存泄漏信息,但在Win8电脑上报告了一条小内存泄漏信息。在这两种情况下,我只是打开应用程序,然后关闭它。是否真的有内存泄漏,我错过了或者这是Win 8.1的问题?ReportMemoryLeaksOnShutdown在Win8.1上显示泄漏,但不是Win7

+1

RTL/VCL/FMX有可能在启动时创建全局对象,并且在退出时不会被释放。对于RTL/VCL/FMX来说,这并不是闻所未闻的。但是,如果是这样的话,Embarcadero应该将其注册为内存管理器的已知泄漏,因此不会将其报告为泄漏。因此,无论您是否遇到预计会泄漏但未被注册的对象,或者这是一个真正意外的泄漏。无论哪种方式,按照David的说法使用FastMM的完整版本进行追踪。 –

回答

5

内存管理器泄漏报告机制是可靠的。看来你的泄漏只会在某些系统上出现。这个问题很可能不在操作系统中,而是在您的代码中。或者也许在Embarcadero库代码中。

但是相信内存管理器。根据我的经验,当它告诉你有泄漏时,就有泄漏。有一点需要注意,IDE调试器有时会在您的进程中分配内存,然后泄漏。因此,在调试时,您有时会发现内存泄漏是误报,因为它们是由调试器引起的。但这不是这里的情况。你的过程真的在泄漏。

让自己去报告内存泄漏的机器,并调试那里的泄漏。 FastMM的完整版本可能会更有效地完成这项工作,它可以为泄漏内存块提供更详细的信息。

相关问题