你好
我有一个用 Delphi 2006 编写的动态链接库,它的使用子句中有 forms.pas。
如果我加载 dll 然后立即在 for 循环中卸载它,比如 10000 次,内存会慢慢攀升。但是,如果我从 dll 的 uses 子句中取出 Forms.pas,那么问题就会消失。
代码非常简单
这是我的dll代码:
library Project1;
uses
Forms;
begin
end.
这是我的调用应用程序代码:
procedure TForm1.Button1Click(Sender: TObject);
var
t_ImportHandle: LongInt;
t_Index: Integer;
begin
for t_Index := 0 to 10000 - 1 do
begin
t_ImportHandle := LoadLibrary('Project1.dll');
FreeLibrary(t_ImportHandle);
end;
end;
有没有其他人能够复制这个或知道原因是什么以及如何解决它?
最佳答案
TApplication.Create
使用 Classes.pas 中的 MakeObjectInstance
函数。 MakeObjectInstance 使用 VirtualAlloc 分配一个 4KB 缓冲区,但不会释放它,因此每次加载/卸载 DLL 时,它都会泄漏那么多。 Andreas Hausladen 曾经有一篇关于它的博客文章,但看起来他已将其删除。在 CodeCentral 上发布了一个修复程序,它也包含在 Andreas 的 VCL Fix Pack 包中。
关于Delphi forms.pas 内存泄漏?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/4082384/