lazarus中indy内存泄漏问题

发布时间 2023-12-19 19:51:26作者: 禁卫军

如果您的 Indy 应用程序中存在内存泄漏,那是因为您使用了 IdStack 或 IdThread 单元,或者依赖于它们的组件。这是设计使然,在 Delphi 中,通过向内存管理器注册泄漏来抑制泄漏报告。此功能不适用于 Free Pascal,但您可以删除故意的内存泄漏。在文件 IdCompilerDefines.inc 中,您应该替换以下行:

{.$DEFINE FREE_ON_FINAL}
{$UNDEF FREE_ON_FINAL}
有了这个:

{$DEFINE FREE_ON_FINAL}
{.$UNDEF FREE_ON_FINAL}
并重新编译拉撒路和印地。请注意,IdCompilerDefines.inc 存在于 5 个不同的目录中,您需要在所有目录中进行更改。

<翻译>警告:</翻译> 警告 泄漏已消失,但您应该阅读 IdStack.pas 和 IdThread.pas 单元中的定义相关警告,以避免潜在的 GPF 情况。阅读下面的开发人员说明。
重要的开发人员说明
泄漏不是无法释放对象的问题(显然,它们可以释放,如定义FREE_ON_FINAL时所见),而更多的是单元依赖性的问题。有问题的对象与其他单位共享,并且已经注意到,有时单位可能并不总是按照您期望的顺序最终确定,这在野外已经观察到。因此,默认情况下不会释放这些对象,而是会泄漏它们,以防以后仍被访问。泄漏很小(只有几个字节),并且仅在单元完成期间,9x% 的时间仅在应用程序关闭期间(除非您在运行时动态卸载的 DLL 中使用 Indy)。