Fastmm4和泄漏手柄

时间:2010-05-26 11:50:11

标签: delphi

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

我的问题是,FastMM4会报告泄漏事件处理吗?这是否需要我重建包含FastMM4的dll?我也听到有人提到ShareMM,我需要添加吗?

我正在使用Delphi2007,我认为它正在使用borland内存管理器,如果是这样,我应该用fastMM4替换它吗?这样做的步骤是什么?

很抱歉提出这么多问题,经过几年的.net开发后,我正在研究delphi。

JD。

1 个答案:

答案 0 :(得分:7)

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

这也不是Delphi与.NET的关系,因为.NET的垃圾收集无法比FastMM更好地解决这个问题。句柄是非内存资源,你必须像在.NET中那样保持它们不会泄漏:确保任何分配一个的东西在你完成它时释放它。

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

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