我刚刚使用了FastMM4来检测泄漏。我没有意识到我们的应用程序正在使用一个泄漏事件句柄的动态链接库,所以我修复了FastMM4报告的任何泄漏,但没有修复句柄,因为它没有报告。
我的问题是,FastMM4会报告泄漏的事件句柄吗?这是否需要我重新构建包含FastMM4的dlls?我还听到有人提到了ShareMM,我还需要加上这个吗?
我使用的是Delphi2007,我认为它使用的是borland内存管理器,如果是这样,我应该用fastMM4内存管理器替换它吗?实现这一目标的步骤是什么?
很抱歉问了这么多问题,在做了几年的.net开发之后,我正在研究delphi。
JD.
发布于 2010-05-26 20:07:28
不是的。FastMM是一个内存管理器,它只能报告应用程序通过FastMM分配的内存泄漏。句柄是对Windows分配的系统对象的不透明引用,因此FastMM不能跟踪它们,其他任何Delphi内存管理器也不能。
而且这也不是Delphi和.NET之间的比较,因为.NET的垃圾回收不可能比FastMM更好地解决这个问题。句柄是非内存资源,您必须防止它们像在.NET中那样泄漏:确保分配一个句柄的任何东西在使用完毕后都会释放它。
你知道你漏的是哪种类型的把手吗?如果它比无处不在的HWND更不常见,那么这将是追踪问题的一个很好的起点:找到分配该类型句柄的位置。
至于你的另一个问题,关于Delphi2007,它内置了FastMM,而不是旧的BorlandMM。但这是一种基本的版本。要访问FullDebugMode功能,您需要从SourceForge下载FastMM,并将其添加到uses列表的顶部,然后使用FullDebugMode编译器定义进行重新构建。
https://stackoverflow.com/questions/2912629
复制相似问题