The*_*oon 3 memory delphi dll memory-leaks
您好
我在Delphi 2006中有一个动态链接库,在其uses子句中有forms.pas.
如果我加载dll然后立即在for循环中卸载它,比如10000次,内存会慢慢爬上去.但是,如果我将Forms.pas从dll的uses子句中删除,那么问题就会消失.
代码很简单
这是我的dll代码:
library Project1;
uses
Forms;
begin
end.
Run Code Online (Sandbox Code Playgroud)
这是我的调用应用程序的代码:
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;
Run Code Online (Sandbox Code Playgroud)
是否有其他人能够复制这个或知道原因是什么以及如何解决它?
TApplication.Create
使用MakeObjectInstance
Classes.pas中的函数.MakeObjectInstance使用VirtualAlloc分配一个4KB缓冲区,但不释放它,因此每次加载/卸载DLL时它都会泄漏那么多.安德烈亚斯·豪斯拉登(Andreas Hausladen)曾经有一篇关于它的博客文章,但看起来他已经把它取消了.在CodeCentral上发布了一个修复程序,它也包含在Andreas的VCL Fix Pack软件包中.