gpt4 book ai didi

delphi - 为什么 Themes.pas 在链接到 DLL 时会泄漏 TThemeServices 单例

转载 作者:行者123 更新时间:2023-12-03 14:47:29 25 4
gpt4 key购买 nike

更新: XE2 中引入 VCL 样式的更改消除了内存泄漏。所以我想这毕竟是无意的。

<小时/>

今天我在 Themes.pas 中遇到了 VCL 内存泄漏。它仅发生在 DLL 中。单元最终代码如下:

finalization
if not IsLibrary then
InternalServices.Free;

InternalServices 是在调用 ThemeServices 函数时按需创建的单例。许多 DLL 没有 UI,因此永远不要创建此单例。但是,我碰巧有一个 Excel 的 COM 加载项,这确实导致了这种泄漏现象。

泄漏并没有特别困扰我,因为这个 DLL 永远不会从同一进程重复加载和卸载。我知道如何使用 ThemeServicesClass 全局变量修复泄漏。

我的问题是问是否有人可以解释为什么这段代码是这样的。这样编码似乎是故意的。对于我的一生,我无法对这种故意泄漏做出解释。

最佳答案

一种解释是,当操作系统加载程序锁处于事件状态时,会执行单元最终确定部分。在此期间,DLL 在不冒死锁风险的情况下可以执行的操作受到严格限制。

关于delphi - 为什么 Themes.pas 在链接到 DLL 时会泄漏 TThemeServices 单例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5008903/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com