RetRecord 함수를 Thread 안에서 계속 사용하다보면 ...메모리가 조금씩 계속 올라갑니다..
왜 그럴까요... ADO 의 버그인지 함수를 잘못 사용하고 있는건지??
다른 구현 가능한 방식있으면 알려주시면 고맙겠습니다.
<!--CodeS-->
function RetRecord(tSql : string;ConnStr : string; RetCnt : integer) : OleVariant;
var
Rs : _RecordSet;
cnt : boolean;
begin
cnt := true;
result := null;
CoInitializeEX(NIL, COINIT_APARTMENTTHREADED);
try
try
Rs := CoRecordset.Create;
try
Rs.Open(tSql,ConnStr,adOpenDynamic,adLockOptimistic,adCmdText);
try
if not (Rs.EOF or Rs.BOF) then
begin
case RetCnt of
1 : Result := Rs.GetRows(-1,EmptyParam,EmptyParam);
2 : begin
cnt := false;
Result := Rs;
end;
end;
end
else
result := null;
finally
RS.Close;
end;
finally
RS := nil;
end;
except
result := null;
end;
finally
CoUninitialize;
end;
end;
<!--CodeE-->
딴데서 프리한다고 Rs값이 리턴값이니 딴데서 없애는것이 일순 맞는 것 같은데
내부 내용에서 보면 리턴값이 없을때에도 프리도 없네요
단지 변수에 널값만 넣을뿐 인데 이경우 프리는 영영 못할텐데 프로세스 종료때까지
일단 코딩 원칙 한가지를 꼭 신경쓰세요
Create 가 있으면 Free
New 가 있으면 Dispose
GetMem 이 있으면 FreeMem
전 외부에 변수로 던져주지 않을때에는 아예 쌍(new, dispose)으로 만들어서 가운데에 코딩을 합니다.
일단 프리가 없어서 메모리 누수가 있는것 처럼 보이네요 그럼 이만 즐코 ^^