delphi - Fastmm4 和泄漏的句柄

标签 delphi

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

我的问题是,FastMM4 会报告泄漏的事件句柄吗?这需要我重建包含 FastMM4 的 dll 吗?我还听到有人提到 ShareMM,我需要补充吗?

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

很抱歉问了这么多问题,我在做 .net 开发几年后正在看 delphi。

京东。

最佳答案

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

这也不是真正的 Delphi 与 .NET 的对比,因为 .NET 的垃圾收集无法比 FastMM 更好地解决这个问题。句柄是非内存资源,您必须像在 .NET 中一样防止它们泄漏:确保分配一个的任何东西在您使用完后释放它。

你知道你泄漏的是什么类型的句柄吗?如果它不像无处不在的 HWND 那样常见,那么这将是追踪问题的一个很好的起点:找到您在何处分配该类型的句柄。

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

关于delphi - Fastmm4 和泄漏的句柄,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2912629/

相关文章:

delphi - 判断一个点是否在多边形内?

delphi - 动态按钮的OnClick事件?

delphi - TIdTCPServer 有时不从套接字读取数据

delphi - 我无法将 SHL(左移)与 int64 变量一起使用

delphi - 多显示器设置更改后如何恢复/清除表单位置

c# - Delphi 到 C# - 任何像样的工具来做一些硬核转换?

performance - 显示初始图像几秒钟是空白的

mysql - 提交 MySql + Zeos lib

delphi - Free Pascal 和 Delphi 的单源单元测试

delphi - 在主机应用程序和 dll 中使用相同的互斥锁