C++ と mysql++ を使用して結果セットを取得し、fetch_row() で反復します
結果セットには 10000 行あり、この "While" ループには約 3.5 秒かかりました (while ループの内容をコメントアウトしました)。
この状況は正常ですか?もっと早く完成するべきだと思いました!
Connection* conn = ConnPool::getSingletonPtr()->getConn();
Query qr = conn->query(sql);
SYSTEMTIME lpsystime;
GetLocalTime(&lpsystime);
UseQueryResult res = qr.use();
while(FryRow row = res.fetch_row())
{
/*
MyObject obj;
for(int i=0; i<row.size(); i++)
{
obj.setValue(res.fetch_field(i).name(), row[i]);
}
objList->push_back(obj);
*/
}
GetLocalTime(&lpsystime);
MyObject には次のプロパティがあります。
int procedureNo;
int index;
int employeeNo;
int procCount;
int state;
int procPermission;
int procDeadline;
int advanceAlert;
DateTime procTime;
int resultFlag;
string comment;
int flowDirection;
int isHideComment;
int isTrack;
DateTime arriveTime;
string preNodesJsonStr;
string nextNodesJsonStr;
string attachStr;
string employeeName;
DateTime employeeBirthDay;
**************************スプリッター************************ ****** ありがとうございます!コードを変更して、次のように時間を再度測定しました。
Connection* conn = ConnPool::getSingletonPtr()->getConn();
Query qr = conn->query(sql);
SYSTEMTIME lpsystime;
GetLocalTime(&lpsystime); // get the time before use().
UseQueryResult res = qr.use();
GetLocalTime(&lpsystime); // get the time before While loop.
while(FryRow row = res.fetch_row())
{
/*
MyObject obj;
for(int i=0; i<row.size(); i++)
{
obj.setValue(res.fetch_field(i).name(), row[i]);
}
objList->push_back(obj);
*/
}
GetLocalTime(&lpsystime); // get the time when While loop finished.
use() 関数のコストはわずか 10 ミリ秒です。
While ループのコストは 1.677 秒です。
whileループの内容をコメントアウトしないと。3.386 秒かかります。
setValue() 関数は次のように定義されています。
MyObject::setValue(const char * colName, const mysqlpp::String& ele)
{
if(strcmp(colName,"column010") == 0)
procedureNo = ele;
else if(strcmp(colName,"column020") == 0)
index = ele;
else if(strcmp(colName,"column030") == 0)
employeeNo = ele;
else if(strcmp(colName,"column040") == 0)
procCount = ele;
else if(strcmp(colName,"column050") == 0)
state = ele;
else if(strcmp(colName,"column060") == 0)
procPermission = ele;
else if(strcmp(colName,"column070") == 0)
procDeadline = ele;
else if(strcmp(colName,"column080") == 0)
advanceAlert = ele;
else if(strcmp(colName,"column090") == 0)
procTime = ele;
else if(strcmp(colName,"column100") == 0)
resultFlag = ele;
else if(strcmp(colName,"column110") == 0)
comment = ele;
else if(strcmp(colName,"column120") == 0)
flowDirection = ele;
else if(strcmp(colName,"column130") == 0)
isHideComment = ele;
else if(strcmp(colName,"column140") == 0)
isTrack = ele;
else if(strcmp(colName,"column150") == 0)
arriveTime = ele;
else if(strcmp(colName,"column160") == 0)
preNodesJsonStr = ele;
else if(strcmp(colName,"column170") == 0)
nextNodesJsonStr = ele;
else if(strcmp(colName,"column180") == 0)
attachStr = ele;
else if(strcmp(colName,"column190") == 0)
employeeName = ele;
else if(strcmp(colName,"column200") == 0)
employeeBirthDay = ele;
}