Q&A

  • RetRecord 함수를 계속 사용시 메모리가 계속 올라갑니다
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-->
1  COMMENTS
  • Profile
    이중철 2005.03.31 20:18
    음 이거 Rs 을 프리 시키는것이 여기 말고 딴데 있나요
    딴데서 프리한다고 Rs값이 리턴값이니 딴데서 없애는것이 일순 맞는 것 같은데
    내부 내용에서 보면 리턴값이 없을때에도 프리도 없네요
    단지 변수에 널값만 넣을뿐 인데 이경우 프리는 영영 못할텐데 프로세스 종료때까지

    일단 코딩 원칙 한가지를 꼭 신경쓰세요
      Create 가 있으면 Free
      New 가 있으면 Dispose
      GetMem 이 있으면 FreeMem
    전 외부에 변수로 던져주지 않을때에는 아예 쌍(new, dispose)으로 만들어서 가운데에 코딩을 합니다.
      
    일단 프리가 없어서 메모리 누수가 있는것 처럼 보이네요 그럼 이만 즐코 ^^