热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

C++读mysql数据表,遍历结果集然后返回Domain对象的list,一万条记录竟然需要3秒多,应该怎样优化?

1234567这个函数要完成的任务是:利用mysqlpp查询出结果集,然后遍历每一行记录,生成一个Domain对象,放到list中,最后返回一个Domain对象的list。在做测试的时候,发现遍历一万

1
2
3
4
5
6
7
这个函数要完成的任务是:

利用mysqlpp查询出结果集,然后遍历每一行记录,生成一个Domain对象,放到list中,最后返回一个Domain对象的list。

在做测试的时候,发现遍历一万条数据竟然需要3秒多……所以请大家帮忙把把脉,看应该如何优化:



完整的while循环,计时:3.338秒

注释掉第10行,计时:1.174秒

注释掉7-11行,计时:1.193秒

代码:



1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
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类中定义这么一堆属性:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
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类的属性名并不一致)



1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
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;

}



   



推荐阅读
  • Spring特性实现接口多类的动态调用详解
    本文详细介绍了如何使用Spring特性实现接口多类的动态调用。通过对Spring IoC容器的基础类BeanFactory和ApplicationContext的介绍,以及getBeansOfType方法的应用,解决了在实际工作中遇到的接口及多个实现类的问题。同时,文章还提到了SPI使用的不便之处,并介绍了借助ApplicationContext实现需求的方法。阅读本文,你将了解到Spring特性的实现原理和实际应用方式。 ... [详细]
  • MyBatis多表查询与动态SQL使用
    本文介绍了MyBatis多表查询与动态SQL的使用方法,包括一对一查询和一对多查询。同时还介绍了动态SQL的使用,包括if标签、trim标签、where标签、set标签和foreach标签的用法。文章还提供了相关的配置信息和示例代码。 ... [详细]
  • Iamtryingtomakeaclassthatwillreadatextfileofnamesintoanarray,thenreturnthatarra ... [详细]
  • 在Android开发中,使用Picasso库可以实现对网络图片的等比例缩放。本文介绍了使用Picasso库进行图片缩放的方法,并提供了具体的代码实现。通过获取图片的宽高,计算目标宽度和高度,并创建新图实现等比例缩放。 ... [详细]
  • 向QTextEdit拖放文件的方法及实现步骤
    本文介绍了在使用QTextEdit时如何实现拖放文件的功能,包括相关的方法和实现步骤。通过重写dragEnterEvent和dropEvent函数,并结合QMimeData和QUrl等类,可以轻松实现向QTextEdit拖放文件的功能。详细的代码实现和说明可以参考本文提供的示例代码。 ... [详细]
  • 本文介绍了Redis的基础数据结构string的应用场景,并以面试的形式进行问答讲解,帮助读者更好地理解和应用Redis。同时,描述了一位面试者的心理状态和面试官的行为。 ... [详细]
  • 本文讨论了一个关于cuowu类的问题,作者在使用cuowu类时遇到了错误提示和使用AdjustmentListener的问题。文章提供了16个解决方案,并给出了两个可能导致错误的原因。 ... [详细]
  • 本文详细介绍了在ASP.NET中获取插入记录的ID的几种方法,包括使用SCOPE_IDENTITY()和IDENT_CURRENT()函数,以及通过ExecuteReader方法执行SQL语句获取ID的步骤。同时,还提供了使用这些方法的示例代码和注意事项。对于需要获取表中最后一个插入操作所产生的ID或马上使用刚插入的新记录ID的开发者来说,本文提供了一些有用的技巧和建议。 ... [详细]
  • Python正则表达式学习记录及常用方法
    本文记录了学习Python正则表达式的过程,介绍了re模块的常用方法re.search,并解释了rawstring的作用。正则表达式是一种方便检查字符串匹配模式的工具,通过本文的学习可以掌握Python中使用正则表达式的基本方法。 ... [详细]
  • 本文介绍了如何使用C#制作Java+Mysql+Tomcat环境安装程序,实现一键式安装。通过将JDK、Mysql、Tomcat三者制作成一个安装包,解决了客户在安装软件时的复杂配置和繁琐问题,便于管理软件版本和系统集成。具体步骤包括配置JDK环境变量和安装Mysql服务,其中使用了MySQL Server 5.5社区版和my.ini文件。安装方法为通过命令行将目录转到mysql的bin目录下,执行mysqld --install MySQL5命令。 ... [详细]
  • 模板引擎StringTemplate的使用方法和特点
    本文介绍了模板引擎StringTemplate的使用方法和特点,包括强制Model和View的分离、Lazy-Evaluation、Recursive enable等。同时,还介绍了StringTemplate语法中的属性和普通字符的使用方法,并提供了向模板填充属性的示例代码。 ... [详细]
  • 本文介绍了一种轻巧方便的工具——集算器,通过使用集算器可以将文本日志变成结构化数据,然后可以使用SQL式查询。集算器利用集算语言的优点,将日志内容结构化为数据表结构,SPL支持直接对结构化的文件进行SQL查询,不再需要安装配置第三方数据库软件。本文还详细介绍了具体的实施过程。 ... [详细]
  • Ihaveaworkfolderdirectory.我有一个工作文件夹目录。holderDir.glob(*)>holder[ProjectOne, ... [详细]
  • STM32 IO口模拟串口通讯
    转自:http:ziye334.blog.163.comblogstatic224306191201452833850647前阵子,调项目时需要用到低波 ... [详细]
  • 获取时间的函数js代码,js获取时区代码
    本文目录一览:1、js获取服务器时间(动态)2 ... [详细]
author-avatar
love灬贪恋猫
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有