在Delphi中操作Sap对象造成内存增长的原因
曾经在我的一个Delphi开发项目中,我遇到过这样一个问题,困扰了我相当一段时间。
我将SAP对象封装成了类,并在一个线程中调用。也就是说,SAP对象的创建释放全部是通过代码来操作的,不同于直接将SAP控件拖放到窗体上。
线程每执行一次SAP读写操作,内存就增长24K-32K。
关键代码
下面是SAP类的部分关键代码,含有SAP对象的创建和释放。
procedure TSapSvr.Open(FunctionName: string);
begin
if fConnect.LogOn(0, True) then
begin
fFunctionName := FunctionName;
fFunction := fSapFunctions.Add(FunctionName);
end;
end;
procedure TSapSvr.Close;
begin
fFunction := Unassigned;
fSapFunctions.ReMoveAll();
fConnect.LogOff;
end;
我就是在线程中不断的调用Open和Close函数,你能看出问题出在哪里吗?你肯定想不到的。
解决方案
我也是在无意中发现的,不过我现在还不知道原因,告诉你解决的方法吧!那就是将
fSapFunctions.ReMoveAll();
删除!!!
结束语
你能告诉我原因吗?
附件中我提供了我封装的SAP类,分享给大家,如果发现问题,请转送一份文件给我!
评论
发表评论