CRowset consumes lots of VM when move to last record
- From: vijay <vksinghbhu@xxxxxxxxx>
- Date: Mon, 17 Dec 2007 20:49:37 -0800 (PST)
PLATFORM - XP
Database - Oracle 10.2g
Tool - Vc++ 2005
Provider - OraOLEDB.Oracle.1
Hi,
I am using OleDB CRowset to fetch data from a table which has millions
of records. when i open table and move to last record it consumes lots
of virtual memory. Application become slow also.
When i am opening same table using MS ACCESS application and moving to
last record it VM memory saze is normal.
Can anyone advice me how can I fix lots of virtual memory uses problem
while moving last record in the rowset.
Thanks and regard
Vijay Singh
EDISPHERE Software
------------------------------------------------------------------------------------
Client code
CABILOGSRECONCIL rset;
rset.OpenAll();
rset.MoveNext(50000);
rset.Close();
--------------------------------------------------------------------------------------
Code generated by wizard
// ABILOGSRECONCIL.h : Declaration of the CABILOGSRECONCIL
#pragma once
// code generated on Monday, December 17, 2007, 3:14 PM
class CABILOGSRECONCILAccessor
{
public:
DB_NUMERIC m_RECNO;
DB_NUMERIC m_RECORDID;
DB_NUMERIC m_FOLDERID;
TCHAR m_SENDERID[31];
TCHAR m_RECEIVERID[31];
TCHAR m_INTCTRLNO[15];
TCHAR m_FUNCGCTRLNO[15];
TCHAR m_TSETCTRLNO[36];
DB_NUMERIC m_INLOGKEY;
DB_NUMERIC m_FGLOGKEY;
TCHAR m_APPMSGKEY[31];
DB_NUMERIC m_TPAGREEMENTKEY;
TCHAR m_MESSAGEID[26];
DB_NUMERIC m_MESSAGETYPE;
TCHAR m_INPUTFILENAME[256];
TCHAR m_OUTPUTFILENAME[256];
TCHAR m_ISASSODATAPRESENT[2];
DBTIMESTAMP m_DATE_TIME;
DB_NUMERIC m_MESSAGESTATE;
DB_NUMERIC m_ACKSTATE;
DB_NUMERIC m_ACKEXPIRETIME;
TCHAR m_ERRORCODE[51];
DB_NUMERIC m_ACKKEY;
TCHAR m_ACKFILENAME[256];
TCHAR m_PRIORITY[2];
DB_NUMERIC m_NUMBEROFBYTES;
DB_NUMERIC m_NUMBEROFSEGMENTS;
DB_NUMERIC m_STANDARD;
TCHAR m_DIRECTION[2];
TCHAR m_CURWRKACTID[51];
TCHAR m_NEXTWRKACTID[51];
TCHAR m_NEXTWRKHINT[21];
TCHAR m_ACKCODE[51];
TCHAR m_USERKEY1[31];
TCHAR m_USERKEY2[31];
TCHAR m_USERKEY3[31];
DB_NUMERIC m_RELATIONKEY;
// The following wizard-generated data members contain status
// values for the corresponding fields in the column map. You
// can use these values to hold NULL values that the database
// returns or to hold error information when the compiler returns
// errors. See Field Status Data Members in Wizard-Generated
// Accessors in the Visual C++ documentation for more information
// on using these fields.
// NOTE: You must initialize these fields before setting/inserting
data!
DBSTATUS m_dwRECNOStatus;
DBSTATUS m_dwRECORDIDStatus;
DBSTATUS m_dwFOLDERIDStatus;
DBSTATUS m_dwSENDERIDStatus;
DBSTATUS m_dwRECEIVERIDStatus;
DBSTATUS m_dwINTCTRLNOStatus;
DBSTATUS m_dwFUNCGCTRLNOStatus;
DBSTATUS m_dwTSETCTRLNOStatus;
DBSTATUS m_dwINLOGKEYStatus;
DBSTATUS m_dwFGLOGKEYStatus;
DBSTATUS m_dwAPPMSGKEYStatus;
DBSTATUS m_dwTPAGREEMENTKEYStatus;
DBSTATUS m_dwMESSAGEIDStatus;
DBSTATUS m_dwMESSAGETYPEStatus;
DBSTATUS m_dwINPUTFILENAMEStatus;
DBSTATUS m_dwOUTPUTFILENAMEStatus;
DBSTATUS m_dwISASSODATAPRESENTStatus;
DBSTATUS m_dwDATE_TIMEStatus;
DBSTATUS m_dwMESSAGESTATEStatus;
DBSTATUS m_dwACKSTATEStatus;
DBSTATUS m_dwACKEXPIRETIMEStatus;
DBSTATUS m_dwERRORCODEStatus;
DBSTATUS m_dwACKKEYStatus;
DBSTATUS m_dwACKFILENAMEStatus;
DBSTATUS m_dwPRIORITYStatus;
DBSTATUS m_dwNUMBEROFBYTESStatus;
DBSTATUS m_dwNUMBEROFSEGMENTSStatus;
DBSTATUS m_dwSTANDARDStatus;
DBSTATUS m_dwDIRECTIONStatus;
DBSTATUS m_dwCURWRKACTIDStatus;
DBSTATUS m_dwNEXTWRKACTIDStatus;
DBSTATUS m_dwNEXTWRKHINTStatus;
DBSTATUS m_dwACKCODEStatus;
DBSTATUS m_dwUSERKEY1Status;
DBSTATUS m_dwUSERKEY2Status;
DBSTATUS m_dwUSERKEY3Status;
DBSTATUS m_dwRELATIONKEYStatus;
// The following wizard-generated data members contain length
// values for the corresponding fields in the column map.
// NOTE: For variable-length columns, you must initialize these
// fields before setting/inserting data!
DBLENGTH m_dwRECNOLength;
DBLENGTH m_dwRECORDIDLength;
DBLENGTH m_dwFOLDERIDLength;
DBLENGTH m_dwSENDERIDLength;
DBLENGTH m_dwRECEIVERIDLength;
DBLENGTH m_dwINTCTRLNOLength;
DBLENGTH m_dwFUNCGCTRLNOLength;
DBLENGTH m_dwTSETCTRLNOLength;
DBLENGTH m_dwINLOGKEYLength;
DBLENGTH m_dwFGLOGKEYLength;
DBLENGTH m_dwAPPMSGKEYLength;
DBLENGTH m_dwTPAGREEMENTKEYLength;
DBLENGTH m_dwMESSAGEIDLength;
DBLENGTH m_dwMESSAGETYPELength;
DBLENGTH m_dwINPUTFILENAMELength;
DBLENGTH m_dwOUTPUTFILENAMELength;
DBLENGTH m_dwISASSODATAPRESENTLength;
DBLENGTH m_dwDATE_TIMELength;
DBLENGTH m_dwMESSAGESTATELength;
DBLENGTH m_dwACKSTATELength;
DBLENGTH m_dwACKEXPIRETIMELength;
DBLENGTH m_dwERRORCODELength;
DBLENGTH m_dwACKKEYLength;
DBLENGTH m_dwACKFILENAMELength;
DBLENGTH m_dwPRIORITYLength;
DBLENGTH m_dwNUMBEROFBYTESLength;
DBLENGTH m_dwNUMBEROFSEGMENTSLength;
DBLENGTH m_dwSTANDARDLength;
DBLENGTH m_dwDIRECTIONLength;
DBLENGTH m_dwCURWRKACTIDLength;
DBLENGTH m_dwNEXTWRKACTIDLength;
DBLENGTH m_dwNEXTWRKHINTLength;
DBLENGTH m_dwACKCODELength;
DBLENGTH m_dwUSERKEY1Length;
DBLENGTH m_dwUSERKEY2Length;
DBLENGTH m_dwUSERKEY3Length;
DBLENGTH m_dwRELATIONKEYLength;
void GetRowsetProperties(CDBPropSet* pPropSet)
{
pPropSet->AddProperty(DBPROP_CANFETCHBACKWARDS, true,
DBPROPOPTIONS_OPTIONAL);
pPropSet->AddProperty(DBPROP_CANSCROLLBACKWARDS, true,
DBPROPOPTIONS_OPTIONAL);
}
HRESULT OpenDataSource()
{
CDataSource _db;
HRESULT hr;
// The connection string below may contain plain text passwords and/or
// other sensitive information. Please remove the #error after
reviewing
// the connection string for any security related issues. You may want
to
// store the password in some other form or use a different user
authentication.
hr = _db.OpenFromInitializationString(L"Provider=OraOLEDB.Oracle.
1;Persist Security Info=False;User ID=abilogs;Password=abilogs;Data
Source=XE_NGP23;Extended Properties=\"\"");
if (FAILED(hr))
{
#ifdef _DEBUG
AtlTraceErrorRecords(hr);
#endif
return hr;
}
return m_session.Open(_db);
}
void CloseDataSource()
{
m_session.Close();
}
operator const CSession&()
{
return m_session;
}
CSession m_session;
DEFINE_COMMAND_EX(CABILOGSRECONCILAccessor, L" \
SELECT \
RECNO, \
RECORDID, \
FOLDERID, \
SENDERID, \
RECEIVERID, \
INTCTRLNO, \
FUNCGCTRLNO, \
TSETCTRLNO, \
INLOGKEY, \
FGLOGKEY, \
APPMSGKEY, \
TPAGREEMENTKEY, \
MESSAGEID, \
MESSAGETYPE, \
INPUTFILENAME, \
OUTPUTFILENAME, \
ISASSODATAPRESENT, \
DATE_TIME, \
MESSAGESTATE, \
ACKSTATE, \
ACKEXPIRETIME, \
ERRORCODE, \
ACKKEY, \
ACKFILENAME, \
PRIORITY, \
NUMBEROFBYTES, \
NUMBEROFSEGMENTS, \
STANDARD, \
DIRECTION, \
CURWRKACTID, \
NEXTWRKACTID, \
NEXTWRKHINT, \
ACKCODE, \
USERKEY1, \
USERKEY2, \
USERKEY3, \
RELATIONKEY \
FROM ABILOGS.RECONCIL")
// In order to fix several issues with some providers, the code below
may bind
// columns in a different order than reported by the provider
BEGIN_COLUMN_MAP(CABILOGSRECONCILAccessor)
COLUMN_ENTRY_PS_LENGTH_STATUS(1, 38, 0, m_RECNO, m_dwRECNOLength,
m_dwRECNOStatus)
COLUMN_ENTRY_PS_LENGTH_STATUS(2, 38, 0, m_RECORDID,
m_dwRECORDIDLength, m_dwRECORDIDStatus)
COLUMN_ENTRY_PS_LENGTH_STATUS(3, 38, 0, m_FOLDERID,
m_dwFOLDERIDLength, m_dwFOLDERIDStatus)
COLUMN_ENTRY_LENGTH_STATUS(4, m_SENDERID, m_dwSENDERIDLength,
m_dwSENDERIDStatus)
COLUMN_ENTRY_LENGTH_STATUS(5, m_RECEIVERID, m_dwRECEIVERIDLength,
m_dwRECEIVERIDStatus)
COLUMN_ENTRY_LENGTH_STATUS(6, m_INTCTRLNO, m_dwINTCTRLNOLength,
m_dwINTCTRLNOStatus)
COLUMN_ENTRY_LENGTH_STATUS(7, m_FUNCGCTRLNO, m_dwFUNCGCTRLNOLength,
m_dwFUNCGCTRLNOStatus)
COLUMN_ENTRY_LENGTH_STATUS(8, m_TSETCTRLNO, m_dwTSETCTRLNOLength,
m_dwTSETCTRLNOStatus)
COLUMN_ENTRY_PS_LENGTH_STATUS(9, 38, 0, m_INLOGKEY,
m_dwINLOGKEYLength, m_dwINLOGKEYStatus)
COLUMN_ENTRY_PS_LENGTH_STATUS(10, 38, 0, m_FGLOGKEY,
m_dwFGLOGKEYLength, m_dwFGLOGKEYStatus)
COLUMN_ENTRY_LENGTH_STATUS(11, m_APPMSGKEY, m_dwAPPMSGKEYLength,
m_dwAPPMSGKEYStatus)
COLUMN_ENTRY_PS_LENGTH_STATUS(12, 38, 0, m_TPAGREEMENTKEY,
m_dwTPAGREEMENTKEYLength, m_dwTPAGREEMENTKEYStatus)
COLUMN_ENTRY_LENGTH_STATUS(13, m_MESSAGEID, m_dwMESSAGEIDLength,
m_dwMESSAGEIDStatus)
COLUMN_ENTRY_PS_LENGTH_STATUS(14, 38, 0, m_MESSAGETYPE,
m_dwMESSAGETYPELength, m_dwMESSAGETYPEStatus)
COLUMN_ENTRY_LENGTH_STATUS(15, m_INPUTFILENAME,
m_dwINPUTFILENAMELength, m_dwINPUTFILENAMEStatus)
COLUMN_ENTRY_LENGTH_STATUS(16, m_OUTPUTFILENAME,
m_dwOUTPUTFILENAMELength, m_dwOUTPUTFILENAMEStatus)
COLUMN_ENTRY_LENGTH_STATUS(17, m_ISASSODATAPRESENT,
m_dwISASSODATAPRESENTLength, m_dwISASSODATAPRESENTStatus)
COLUMN_ENTRY_LENGTH_STATUS(18, m_DATE_TIME, m_dwDATE_TIMELength,
m_dwDATE_TIMEStatus)
COLUMN_ENTRY_PS_LENGTH_STATUS(19, 38, 0, m_MESSAGESTATE,
m_dwMESSAGESTATELength, m_dwMESSAGESTATEStatus)
COLUMN_ENTRY_PS_LENGTH_STATUS(20, 38, 0, m_ACKSTATE,
m_dwACKSTATELength, m_dwACKSTATEStatus)
COLUMN_ENTRY_PS_LENGTH_STATUS(21, 38, 0, m_ACKEXPIRETIME,
m_dwACKEXPIRETIMELength, m_dwACKEXPIRETIMEStatus)
COLUMN_ENTRY_LENGTH_STATUS(22, m_ERRORCODE, m_dwERRORCODELength,
m_dwERRORCODEStatus)
COLUMN_ENTRY_PS_LENGTH_STATUS(23, 38, 0, m_ACKKEY, m_dwACKKEYLength,
m_dwACKKEYStatus)
COLUMN_ENTRY_LENGTH_STATUS(24, m_ACKFILENAME, m_dwACKFILENAMELength,
m_dwACKFILENAMEStatus)
COLUMN_ENTRY_LENGTH_STATUS(25, m_PRIORITY, m_dwPRIORITYLength,
m_dwPRIORITYStatus)
COLUMN_ENTRY_PS_LENGTH_STATUS(26, 38, 0, m_NUMBEROFBYTES,
m_dwNUMBEROFBYTESLength, m_dwNUMBEROFBYTESStatus)
COLUMN_ENTRY_PS_LENGTH_STATUS(27, 38, 0, m_NUMBEROFSEGMENTS,
m_dwNUMBEROFSEGMENTSLength, m_dwNUMBEROFSEGMENTSStatus)
COLUMN_ENTRY_PS_LENGTH_STATUS(28, 38, 0, m_STANDARD,
m_dwSTANDARDLength, m_dwSTANDARDStatus)
COLUMN_ENTRY_LENGTH_STATUS(29, m_DIRECTION, m_dwDIRECTIONLength,
m_dwDIRECTIONStatus)
COLUMN_ENTRY_LENGTH_STATUS(30, m_CURWRKACTID, m_dwCURWRKACTIDLength,
m_dwCURWRKACTIDStatus)
COLUMN_ENTRY_LENGTH_STATUS(31, m_NEXTWRKACTID,
m_dwNEXTWRKACTIDLength, m_dwNEXTWRKACTIDStatus)
COLUMN_ENTRY_LENGTH_STATUS(32, m_NEXTWRKHINT, m_dwNEXTWRKHINTLength,
m_dwNEXTWRKHINTStatus)
COLUMN_ENTRY_LENGTH_STATUS(33, m_ACKCODE, m_dwACKCODELength,
m_dwACKCODEStatus)
COLUMN_ENTRY_LENGTH_STATUS(34, m_USERKEY1, m_dwUSERKEY1Length,
m_dwUSERKEY1Status)
COLUMN_ENTRY_LENGTH_STATUS(35, m_USERKEY2, m_dwUSERKEY2Length,
m_dwUSERKEY2Status)
COLUMN_ENTRY_LENGTH_STATUS(36, m_USERKEY3, m_dwUSERKEY3Length,
m_dwUSERKEY3Status)
COLUMN_ENTRY_PS_LENGTH_STATUS(37, 38, 0, m_RELATIONKEY,
m_dwRELATIONKEYLength, m_dwRELATIONKEYStatus)
END_COLUMN_MAP()
};
class CABILOGSRECONCIL : public
CCommand<CAccessor<CABILOGSRECONCILAccessor> >
{
public:
HRESULT OpenAll()
{
HRESULT hr;
hr = OpenDataSource();
if (FAILED(hr))
return hr;
__if_exists(GetRowsetProperties)
{
CDBPropSet propset(DBPROPSET_ROWSET);
__if_exists(HasBookmark)
{
if( HasBookmark() )
propset.AddProperty(DBPROP_IRowsetLocate, true);
}
GetRowsetProperties(&propset);
return OpenRowset(&propset);
}
__if_not_exists(GetRowsetProperties)
{
__if_exists(HasBookmark)
{
if( HasBookmark() )
{
CDBPropSet propset(DBPROPSET_ROWSET);
propset.AddProperty(DBPROP_IRowsetLocate, true);
return OpenRowset(&propset);
}
}
}
return OpenRowset();
}
HRESULT OpenRowset(DBPROPSET *pPropSet = NULL)
{
HRESULT hr = Open(m_session, NULL, pPropSet);
#ifdef _DEBUG
if(FAILED(hr))
AtlTraceErrorRecords(hr);
#endif
return hr;
}
void CloseAll()
{
Close();
ReleaseCommand();
CloseDataSource();
}
};
.
- Prev by Date: Re: ATL OLE DB Consumer Code problem
- Next by Date: Re: SQL 2005 linked server to Access 97
- Previous by thread: HELP! OleDBException: No error message available, result code: -2147220999(0x800401F9)
- Index(es):