Delphi ReportMemoryLeaksOnShutdown在Win8.1上显示泄漏,但在Win7上不显示

Delphi ReportMemoryLeaksOnShutdown在Win8.1上显示泄漏,但在Win7上不显示,delphi,Delphi,ReportMemoryLeaksOnShutdown=在我的Delphi XE应用程序中为true。在我的Win7计算机上,我在close上没有看到内存泄漏信息,但在Win8计算机上报告了一条小内存泄漏消息。在这两种情况下,我只是打开应用程序,然后关闭它。我是否真的错过了内存泄漏,或者这是Win 8.1的问题?内存管理器泄漏报告机制是可靠的。您似乎有一个仅在某些系统上显示的泄漏。问题很可能不是在操作系统中,而是在代码中。或者在Embarcadero库代码中 但是请相信内存管理器。根据我的经验,

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

内存管理器泄漏报告机制是可靠的。您似乎有一个仅在某些系统上显示的泄漏。问题很可能不是在操作系统中,而是在代码中。或者在Embarcadero库代码中

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


找到报告内存泄漏的机器,并在那里调试泄漏。使用完整版本的FastMM,您可能会更有效地执行此操作,该版本提供了有关泄漏内存块的更详细信息。

RTL/VCL/FMX可能在启动时创建了一个全局对象,而在退出时不会被释放。RTL/VCL/FMX这样做并非闻所未闻。但是,如果是这种情况,Embarcadero应该将其注册为内存管理器的已知泄漏,这样就不会将其报告为泄漏。因此,要么您遇到了预期会泄漏但未注册的对象,要么它是真正的意外泄漏。不管怎样,按照David说的做,并使用完整版本的FastMM来追踪它。