在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类,分享给大家,如果发现问题,请转送一份文件给我!



评论

此博客中的热门博文

如何解决在Delphi2009中添加pas组件的问题

杀死团队的七种武器(转)