开发工具是VC,以前经常用OO4O访问Oracle,最近想试试OCI,结果发现比OO4O还慢,是哪里出问题了,请各位大侠指教!具体情况是这样的,有一个表有20个字段,300,0000行记录,用OO4O时,每秒能返回10000多条记录,用OCI时,只能返回2000个左右,怎么差这么远!按道理,OCI应该比OO4O效率高。1、OO4Oextern ODatabase odb;ODynaset odyn;
odyn.Open(odb,"select F1,F2,F3,... FROM T_MyTable",ODYNASET_READONLY|ODYNASET_NOCACHE);while(!odyn.isEOF())
{
odyn.GetFieldValue(...);
odyn.MoveNext();
}2、OCIextern OCISvcCtx* g_pSvc;
extern OCIStmt* g_pStmt;
extern OCIError* g_pErr;CString sSQL = "select F1,F2,F3,... FROM T_MyTable";//准备
OCIStmtPrepare(g_pStmt, g_pErr, (const text *)sSQL, strlen(sSQL),(ub4)OCI_NTV_SYNTAX, (ub4)OCI_DEFAULT);//执行
OCIStmtExecute(g_pSvc, g_pStmt, g_pErr, (ub4)0, (ub4)0,
(OCISnapshot *)NULL, (OCISnapshot *)NULL,OCI_DEFAULT);//绑定各列
OCIDefineByPos(g_pStmt, &hDefn, g_pErr,
col,
(ub1 *) pBuf, nBufLen,
SQLT_STR, m_pColumnInd + col,
NULL, NULL, OCI_DEFAULT);
.......while(1)
{
if(OCIStmtFetch2(g_pStmt,g_pErr,1,OCI_FETCH_NEXT,0,OCI_DEFAULT) != OCI_SUCCESS)
{
break;
}
//...得到数据
}
odyn.Open(odb,"select F1,F2,F3,... FROM T_MyTable",ODYNASET_READONLY|ODYNASET_NOCACHE);while(!odyn.isEOF())
{
odyn.GetFieldValue(...);
odyn.MoveNext();
}2、OCIextern OCISvcCtx* g_pSvc;
extern OCIStmt* g_pStmt;
extern OCIError* g_pErr;CString sSQL = "select F1,F2,F3,... FROM T_MyTable";//准备
OCIStmtPrepare(g_pStmt, g_pErr, (const text *)sSQL, strlen(sSQL),(ub4)OCI_NTV_SYNTAX, (ub4)OCI_DEFAULT);//执行
OCIStmtExecute(g_pSvc, g_pStmt, g_pErr, (ub4)0, (ub4)0,
(OCISnapshot *)NULL, (OCISnapshot *)NULL,OCI_DEFAULT);//绑定各列
OCIDefineByPos(g_pStmt, &hDefn, g_pErr,
col,
(ub1 *) pBuf, nBufLen,
SQLT_STR, m_pColumnInd + col,
NULL, NULL, OCI_DEFAULT);
.......while(1)
{
if(OCIStmtFetch2(g_pStmt,g_pErr,1,OCI_FETCH_NEXT,0,OCI_DEFAULT) != OCI_SUCCESS)
{
break;
}
//...得到数据
}
就是Release版的,确切的说,是在同一个程序中测试的。
至于你说的测试结果相反,我觉得可能是两个原因
1.你的代码问题
2.你的测试方法