Delphi中DLL调用后如何完全释放?

zhengxionghua 2002-02-25 08:13:44
主程序会频繁调用DLL,所以我测试调用DLL后的内存使用情况
结果发现每次调用后内存都使用量都增加

我用了一个循环只调用,调用后不做任何事情即释放DLL
100此,内存使用量增加了将近1M
1000次,增加了将近5M

不只是DLL的问题还是主窗口的问题,还是操作系统的问题???

DLL调用使用的是LoadLibrary(DLLname)
DLL释放使用的是FreeLibrary(DLLHandle)
...全文
612 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
zhengxionghua 2002-03-02
  • 打赏
  • 举报
回复
希望各位能自己测试一下,有没有更好地解释呀?
  • 打赏
  • 举报
回复
是操作系统引起的问题 这是Windows对内存管理的问题
taber 2002-02-28
  • 打赏
  • 举报
回复
不调用dll的情况你试过了吗?一定是dll引起的?
zhengxionghua 2002-02-28
  • 打赏
  • 举报
回复
我的调用源代码如下:
for i:=0 to 1000 do
begin
if SysUtils.FindFirst(ExtractFilePath(Application.ExeName)+strPlugIn+'*.dll', faAnyFile, SR) = 0 then
begin
repeat
DLLName:= PChar(ExtractFilePath(Application.ExeName)+strPlugIn+sr.Name);
DLLHandle:= LoadLibrary(DLLname);
try
@GetMenuInfo:= GetProcAddress(DLLHandle,'MenuInfo');
finally
FreeLibrary(DLLHandle);
end;
until SysUtils.FindNext(SR) <> 0;
SysUtils.FindClose(SR);
end;
end;
zhengxionghua 2002-02-28
  • 打赏
  • 举报
回复
请问,为什么我的主程序使用的内存量会线性增加?
dong163 2002-02-26
  • 打赏
  • 举报
回复
up
Liujc 2002-02-26
  • 打赏
  • 举报
回复
FreeLibrary就行了你在DLL中根本没有任何空间。
Liusp 2002-02-26
  • 打赏
  • 举报
回复
关机
zhengxionghua 2002-02-26
  • 打赏
  • 举报
回复
up一下,请高手指教!
zhengxionghua 2002-02-26
  • 打赏
  • 举报
回复
不知各位有没有做过测试?
我的DLL中内容是这样的,请高手支招,谢谢!

library text;

uses
SysUtils,
Classes,
Dialogs,
Forms,
PublicUnit in 'PublicUnit.pas',
OptionF in 'OptionF.pas' {FormOption};

{$R *.res}

procedure MenuInfo(var Info: PChar);stdcall;
begin
Info:= '<MENU caption="xxxx(&S)">';
Info:=PChar(Info+ '<MENU caption="xxxx(&T)" tid="xxx"/>');
Info:=PChar(Info+'</MENU>');
end;

procedure DLLEntry(XML: PChar; TPPCB: TDLLCallBack);stdcall;
begin
Application.CreateHandle;
Application.CreateForm(TFormOption,FormOption);
FormOption.ShowModal;
FormOption.Release;
end;

exports
MenuInfo,
DLLEntry;

begin
end.
webnumen 2002-02-26
  • 打赏
  • 举报
回复
freelibray应该没错吧!!
不知你有没有这样调用呢!例子:
var
libhandle:Thandle
begin
libhandle:=loadlibrary(pchar('aa.dll'));
@shownumber:=getprocaddress(libhandle,'shownumber')
end;
然后再释放!!!
INeedCa 2002-02-25
  • 打赏
  • 举报
回复
FreeLibray应该没有错。

用MemProof 或者 BoundsChecker 查一下Leaks。
liuziran 2002-02-25
  • 打赏
  • 举报
回复
Dll中的函数有没有创建而没有释放的对象?

5,388

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧