2010-05-26 52 views
2

我刚刚使用FastMM4来检测泄漏。我没有意识到我们的应用程序正在使用泄漏事件句柄的DLL,因此我修复了FastMM4报告的任何泄漏,但没有报告,因此没有处理。Fastmm4和泄漏手柄

我的问题是,会不会有FastMM4有泄漏事件处理报告?这是否需要我用FastMM4重建dll?我还听到有人提到ShareMM,我需要补充一点吗?

我使用的Delphi2007,我认为是使用borland内存管理器,如果是的话,我应该用fastMM4替换它吗?有什么步骤来做到这一点?

对不起,提出这么多问题,我在看.net开发几年后delphi。 JDD。

JD。

回答

7

不。FastMM是一个内存管理器,它只能报告应用程序通过FastMM分配的内存泄漏。句柄是对由Windows分配的系统对象的不透明引用,因此FastMM无法跟踪它们,其他Delphi内存管理器也无法跟踪它们。

这不是一个真正的Delphi与.NET的事情,因为.NET的垃圾收集不可能比FastMM更好地解决这个问题。句柄是非内存资源,你必须防止它们以与.NET相同的方式泄漏:确保分配的任何东西在你完成时释放它。

你知道你漏水的手柄是什么类型吗?如果它比普遍存在的HWND更不常见,那么这将是追踪问题的一个很好的起点:找到你在哪里分配这种类型的句柄。

至于你的其他问题,关于德尔福2007年,它与内置FastMM,而不是老BorlandMM。但它是一种基本版本。要访问FullDebugMode功能,您需要从SourceForge下载FastMM,并将其添加到您的使用列表的顶部,并使用定义的FullDebugMode编译器进行重建。

+0

谢谢梅森。我们尝试了Windbg,发现Event类型的手柄在泄漏。我设法修复它,因为它在DLL中,现在它们已经停止泄漏。我听说通常我们应该使用FastMM4.dll更好的内存管理,对于外地的应用程序,我应该用fastmm4.dll替换fastmm.dll,还是需要重新编译我的代码以引用fastmm4.pas等? – 2010-05-26 12:56:00

+0

我不知道有一个fastmm DLL。 FullDebugMode使用dll进行高级分析,但内存管理器本身只是一对pas文件和一个包含文件,基本功能内置于Delphi 2007中。只需在D2007下重新编译,并且您的DLL将启用FastMM,除非它明确使用替换内存管理器。 – 2010-05-26 13:21:34

+0

对不起,我的坏。好的,谢谢你提供的信息。 – 2010-05-28 14:07:29