使用TAdoStoredProc调用Oracle存储过程时发现有内存泄漏(100分)

  • 主题发起人 主题发起人 言希
  • 开始时间 开始时间

言希

Unregistered / Unconfirmed
GUEST, unregistred user!
我设计了一个Oracle存储过程,从数据库中取出需要的数据。其原型如下:
BaSys.GetRecords(iRecCount in number, vDatas in out T_RecordsCur);
--iRecCount 用于传入记录条数。 vDatas 是返回的记录集。
客户端程序使用Delphi编写。其代码大致如下:
TRecord.GetRecords;
var
Proc : TAdoStoredProc;
begin
Proc := TAdoStoredProc.Create(nil);
Proc.Connection := m_Adoc;
Proc.ProcedureName := 'BaSys.GetRecords';
with Proc.Parameters.AddParameter do
begin
DataType := ftinteger;
Direction := pdinput;
name := 'iRecCount';
Value := 100;
End;
try
Proc.Open;
finally
Proc.Close;
Proc.Parameters.Clear;
Proc.Destroy;
end;
end;
我在测试程序时,发现每一次调用该过程。程序占用的内存就增加4k。用
MemProof检查的结果为程序的内存泄漏量为9。
说明:该过程中本来还有一些其它的处理代码,但我在发现问题后,把其它代码删除了。
请诸位老兄帮我想想,会是什么地方出了问题?
 
没看出来。
不过多数释放对象用Free,上面看到你用Destroy,不知道和这个有没有关系
 
不是用Destroy的问题。我发现,如果TAdoConnection一直保持连接不断开的话,就不会有内
存泄漏。只在先断开,再连接的时候才会有内存泄漏。但如果一直连接的话,就不会更新数
据缓存。
 
问题已解决。
 
多人接受答案了。
 
后退
顶部