우연한 기회에 원인을 발견했습니다.
버그인지 의도된 건지 알수없지만 IBX는 TQuery를 이용하여 Query를 던진후
Unprepare 메소드를 호출하지 않으면 내부적으로 사용한 메모리를 해제하지않고
남아있게됩니다. 그래서 점유 메모리가 계속적으로 증가하게 되는거죠.
아래의 예제와 같은 순서로 TQuery를 사용하시면 됩니다.
procedure TExeTextAcceptDBase.InsertKeywordJoin(fTextNo: Double; sKey: String);
begin
with qrTemp1 do
begin
Close;
Unprepare;
SQL.Clear;
SQL.Add('insert into TB_KEYWORDJOIN');
SQL.Add('values (gen_id(GN_KEYWORDJOIN, 1), :fk_textadvno, :keyword)');
ParamByName('fk_textadvno').AsFloat := fTextNo;
ParamByName('keyword').AsString := skey;
Prepare;
ExecSQL;
end;
end;
이성호 님이 쓰신 글 :
: 안녕하십니까?
: 델파이6에서 IBX 6.05를 사용해서 약9만건의 데이터를 동시에 Import 하는
: 프로그램을 작성중 입니다. 그런데 한 만건쯤 Insert하면 Out of Memory 에러가
: 발생합니다. 이상해서 몇가지 테스트를 해보았는데요. TIBQuery를 이용해서
: Insert를 할때마다 메모리 누수현상이 발생하는지 장치관리자에서 보면 사용
: 메모리가 자꾸 증가 하더군요. 대충 1000건에 30M정도의 메모리 누수가 생깁니다.
: 혹시 이런현상 경험하신분 계신가요. 고수님들 한수 부탁드립니다.
|