性能继续提升

嘿嘿,今天改BUG,又发现了一个性能问题。在显示所有BUG列表的打印页面下,显示800个BUG居然要花26s的时间,看上去已经是另人难于忍受了。在显示测试报告页面,由于不需要显示BUG列表,因此,成绩从18s一下子提升到了0.8s,现在这个打印页面需要将所有的BUG都打印出来,需要显示所有的BUG,因此,时间飕飕的往上彪,到了26s,实在是让人难于忍受。
原因在什么地方呢?
通过查看代码,发现有一段:
[code] if (print != null && print.equals("true")) {
List bugList = new BUGService().searchSubmittedBugInAReport(reportId);
List bugInfoViewBeanPageList = new ViewUtil().transformToBugInfoViewBeanListForPrint(bugList);
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
request.setAttribute("resultSize", bugInfoViewBeanPageList.size());
request.setAttribute("bugList", bugInfoViewBeanPageList);
return mapping.findForward("printTestReport");
} else {
return mapping.findForward("success");
}[/code]

在原来的方法中,需要将bugList转换为页面显示需要的BugInfoViewBean数据对象。而原来的做法是取出每一个BUG对象,一个一个将数字转换为显示所需要的字符串,而转换的过程就是查询数据库的过程,因此,如果需要转换800个BUG,每个BUG需要有10个域需要转换的话,那么就要查询数据库为800*10次。出此之外,由于BugInfoViewBean中包含了在显示列表中不需要的信息,而原方法也照转不误。因此,实际上查询数据库都超过10000次,如果每次查询花15ms的话,这次查询就已经花费了15s,另外,将800个对象赋值到另外一个对象,估计也得花费一段时间。因此,整个时间就上去了。

为了避免大量的数据库查询操作,添加了一些Map。由于BUG中的很多字段是相同的,相同的字段再去查询数据库,明显不恰当。因此,需要减少重复的查询次数。
[code] Map<Integer, String> bugSeriousMap = getBugSeriousMap();[/code]
这段代码通过一次查询将数据库中所有的严重程度属性查询出来,构造严重程度的Map。之后通过map,取得每个bug严重程度所对应的字符串表示。
[code] if(null!=element.getBugType()){
viewBean.setBugTypeStr(bugSeriousMap.get(element.getBugType()));
}[/code]
下面这段代码,首先构造人员信息。
Map<Integer, String> personMap = new HashMap<Integer, String>();
如果bug相关的人员不在personMap中,那么访问一次数据库,将其添加进去。如果人员很多的话,可能得需要查询N次。
这个可以更多的优化。比如说:第一次的时候,取这个BUG所属项目的所有人员,以及这个BUG所属被测试项目的所有人员,一次性取得这两个成员的话,应该做的操作就少很多了。
好,记录一下,刚才的优化结果是6.2s。做完这个优化之后,应该会减少更多。但是,如果一次查询是15s,100次查询也就是1.5s,无所谓了。
另外,开发过程实在是不敏捷。我的classes已经check in到配置库了,要重新改的话,需要重新check out classes。耗时2min,然后ant,耗时1.5min,然后启动tomcat,又要耗时1min,要做这件事情,又得先花费4-5分钟时间,没得搞。还是做罢。
这样的开发方式怎么会有效率呢……
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值