0

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;
}
4

1 に答える 1