int CMyDataBase::DBManagerCheckNamePass(char *phone, char *pass, char *mac)
{
char parament[256];
_RecordsetPtr pRs = NULL;
_variant_t paramval;
int nRet = 0; sprintf(parament, "select * from office t1, printer t2 where t2.printer_vip = '%s' and t1.office_manager = '%s' "
" and t1.office_password = '%s' and t1.office_id = t2.office_id",mac, phone, pass);
try
{
pRs = m_Con->Execute(parament, NULL, adCmdText); if (pRs == NULL )
{
return -1;
} if( !( pRs->ADOEOF && pRs->BOF ))
{
nRet = 1;
}
}
catch (_com_error)
{
return 0;
} pRs->Close();
pRs.Release();
pRs = NULL; return nRet;
}代码如上:
在程序执行过程中没有catch到任何_com_error,即全部按正常流程运行。该函数执行50次之后,本身内存占用增长200K左右。更重要的是,它导致Oracle.exe进程内存增和200多K。
Oracle只开了两个服务,一个Listener,一个数据库Service,版本为8i。
不知何解?有什么方法可以解决?
{
char parament[256];
_RecordsetPtr pRs = NULL;
_variant_t paramval;
int nRet = 0; sprintf(parament, "select * from office t1, printer t2 where t2.printer_vip = '%s' and t1.office_manager = '%s' "
" and t1.office_password = '%s' and t1.office_id = t2.office_id",mac, phone, pass);
try
{
pRs = m_Con->Execute(parament, NULL, adCmdText); if (pRs == NULL )
{
return -1;
} if( !( pRs->ADOEOF && pRs->BOF ))
{
nRet = 1;
}
}
catch (_com_error)
{
return 0;
} pRs->Close();
pRs.Release();
pRs = NULL; return nRet;
}代码如上:
在程序执行过程中没有catch到任何_com_error,即全部按正常流程运行。该函数执行50次之后,本身内存占用增长200K左右。更重要的是,它导致Oracle.exe进程内存增和200多K。
Oracle只开了两个服务,一个Listener,一个数据库Service,版本为8i。
不知何解?有什么方法可以解决?
其它的数据库我也碰到过.
一个多线程程序,使用ado连接数据库。
在主线程中有一个自己写的数据库类,在该类中使用_ConnectionPtr连接oracle。
在工作线程中,使用一个该类的变量(全局共享的)访问数据库。本程序本身无内存泄漏。但每执行一次select,oracle.exe进程的内存就增加4K-12K不等,而且一直不回落。
不知何故,请高手帮忙。关键代码如下:
try
{
pRs = m_Con->Execute(parament, NULL, adCmdText);if (pRs == NULL )
{
return -1;
}if( !( pRs->ADOEOF && pRs->BOF ))
{
nRet = 1;
}
}
catch (_com_error)
{
return 0;
}pRs->Close();
pRs.Release();
pRs = NULL;
是否oracle的shared_pool和data buffer导致的?如果是的话,在8i的版本下面怎么清理这些东东?试过了 alter system flush shared_pool,但没有用.