ADO (C++)를 사용하여 데이터베이스에 연결하고 약 5m 레코드의 테이블을 읽었으며 클라이언트 측 메모리 사용을 제한하려고합니다. 현재 레코드를 반복하면 프로세스에서 약 1GB의 메모리 증가가 발생하며이를 크게 줄이려고합니다. ADO 레코드 세트의 메모리 사용 제한
코드
는 (읽기 쉽도록 편집) 매우 표준 C++ ADO입니다 :ADODB::_ConnectionPtr m_pConnection;
m_pConnection.CreateInstance(__uuidof(ADODB::Connection));
m_pConnection->Open(_bstr_t(strConnect), m_strDBUserName, m_strDBPassword, -1);
ADODB::_RecordsetPtr pRecordSet;
pRecordSet.CreateInstance(__uuidof(ADODB::Recordset));
pRecordSet->putref_ActiveConnection(pConnection);
pRecordSet->Open(_variant_t(bstrQuery), vNull, ADODB::adOpenForwardOnly, ADODB::adLockOptimistic, ADODB::adCmdText);
pRecordSet->MoveFirst();
while(!pRecordSet->EOF)
{
CString cardNum = (LPCWSTR)(pRecordSet->Fields->GetItem("CARD_NUM")->Value.bstrVal);
int nSeqNum = pRecordSet->Fields->GetItem("SEQ_NUM")->Value.intVal;
// process data
pRecordSet->MoveNext();
}
내가 관찰하는 것은, 그것은 만 개 기록 당 2백메가바이트에서 레코드를 선형, 메모리 사용량 증가를 반복 할.
내가 원하는 것은 : 처리하는 동안 레코드 집합에 이미 처리 된 레코드의 메모리를 확보하여 메모리 사용량을 낮게 유지하는 것입니다. 이것을 할 수있는 함수가 있습니까?
그렇지 않은 경우 여러 개의 레코드 세트를 사용하여 데이터를 파티션 분할하는 수동 방법을 사용할 수 있습니까?