|
10초간격으로 멀티 쓰레드(12개)를 실행합니다. 쓰레드는 실행완료 후 종료되구요.
쓰레드안에서 하는일은 ado를 이용하여 DB 연결 및 쿼리수행을 하는 동작을 합니다.
쓰레드마다 각기 다른 db 세션을 연결하고 select 후 insert를 수행합니다.
ado는 초기화를 하고 자원 사용 후 모두 clear해주는데도 메모리가 계속증가하는 현상이 발생합니다.
10초마다 DB Connect, DisConnect 하는 부분이 걸리기는하는데 테스트결과 크나큰 성능저하는 없는것으로
보입니다.(메모리 증가도 없구요)
ado에서 메모리 사용은 ado->Open(); 에서 증가하는데 객체 사용 후 모두 초기화를 하는데도 메모리가 증가하네요.
할수 있는건 다한거 같은데 답답하네요..도와 주세요...
간단하게 다음과 같은 로직입니다.
void 쓰레드()
{
::CoInitialize(NULL); // COM객체 초기화
TADOConnection *AdoConn = new TADOConnection(NULL);
AdoConn->ConnectionString = "오라클연결정보";
AdoConn->LoginPrompt = false;
TADOQuery *Ado = new TADOQuery(NULL);
Ado->Connection = AdoConn;
Ado->SQL->Clear();
Ado->SQL->Add("쿼리문장");
Ado->Open();
for(;!Ado->Eof;Ado->Next()){
// Eof 루프 돌면서 로직 처리
}
// Ado Close
Ado->Close();
delete Ado;
// Ado Connect Close
if(AdoConn)
{
AdoConn->Close();
delete AdoConn;
}
::CoUninitialize(); //COM library Clear
_endthread(); // 쓰레드 종료
}
|