C++读mysql数据表,遍历结果集然后返回Domain对象的list,一万条记录竟然需要3秒多,应该怎样优化?
这个函数要完成的任务是:
利用mysqlpp查询出结果集,然后遍历每一行记录,生成一个Domain对象,放到list中,最后返回一个Domain对象的list。
在做测试的时候,发现遍历一万条数据竟然需要3秒多……所以请大家帮忙把把脉,看应该如何优化:
完整的while循环,计时:3.338秒
注释掉第10行,计时:1.174秒
注释掉7-11行,计时:1.193秒
代码:
1. Connection* conn = ConnPool::getSingletonPtr()->getConn();
2. Query qr = conn->query(sql);
3. UseResult res = qr.use();
// 开始计时
4. while(Row row = res.fetch_row()) // 循环10000条记录
5. {
6. Domain obj;
7. for(int i=0; i
8. {
9. // 调用Domain的成员函数,为Domain对象赋值
10. obj.setValue(res.fetch_field(i).name(), row[i]);
11. }
12. objList->push_back(obj);
13.}
// 结束计时
Domain类中定义这么一堆属性:
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;
上面第10行用到的成员函数定义如下(之所以用这个函数,是因为数据表中的字段名和Domain类的属性名并不一致)
void Domain::setValue(const char * colName, const Element& 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;
}
相关阅读:
git merge的时候总是会有一条commit message,请问这是操作不当吗?
react native windows环境搭建的问题
rbac没权限返回如何判断跳转到页面还是ajax返回
在iOS7用actionSheet发现位置错乱了!
ios 怎么在状态栏显示视图
mobaxterm打开vim输入中文只能一个一个输入.比如打出一个4字词只有一个能在vim中输入.可能还会出现另外的字
webpack编译handlebars的问题
python3使用pymysql遇到编码是lanti1,如何插入数据?
mysql对client发过来的字符处理流程?
Ubuntu 64位下添加系统调用,系统注册表需要修改的是syscall_64.tbl吗
mongoose如何取得全部结果数量并只提取部分结果
Android AppWidget 不能显示图片 只显示背景
全局变量 undefined 可以被重写应该怎么理解
域名绑定最多绑定几个
js可不可以定义css animation的时间?
后台发布的活动前台页面样式改变了
Android PinnedHeaderListView如何切换(定位)到某一个Header?
git团队开发?
DOM的核心作用是动态的更新html页面吗
windows平台git每次都会出现莫名其妙的许多changs,但是对比后又没有发现不同