嘿嘿,今天改BUG,又发现了一个性能问题。在显示所有BUG列表的打印页面下,显示800个BUG居然要花26s的时间,看上去已经是另人难于忍受了。在显示测试报告页面,由于不需要显示BUG列表,因此,成绩从18s一下子提升到了0.8s,现在这个打印页面需要将所有的BUG都打印出来,需要显示所有的BUG,因此,时间飕飕的往上彪,到了26s,实在是让人难于忍受。
原因在什么地方呢?
通过查看代码,发现有一段:
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");
}
在原来的方法中,需要将bugList转换为页面显示需要的BugInfoViewBean数据对象。而原来的做法是取出每一个BUG对象,一个一个将数字转换为显示所需要的字符串,而转换的过程就是查询数据库的过程,因此,如果需要转换800个BUG,每个BUG需要有10个域需要转换的话,那么就要查询数据库为800*10次。出此之外,由于BugInfoViewBean中包含了在显示列表中不需要的信息,而原方法也照转不误。因此,实际上查询数据库都超过10000次,如果每次查询花15ms的话,这次查询就已经花费了15s,另外,将800个对象赋值到另外一个对象,估计也得花费一段时间。因此,整个时间就上去了。
为了避免大量的数据库查询操作,添加了一些Map。由于BUG中的很多字段是相同的,相同的字段再去查询数据库,明显不恰当。因此,需要减少重复的查询次数。
Map<Integer, String> bugSeriousMap = getBugSeriousMap();
这段代码通过一次查询将数据库中所有的严重程度属性查询出来,构造严重程度的Map。之后通过map,取得每个bug严重程度所对应的字符串表示。
if(null!=element.getBugType()){
viewBean.setBugTypeStr(bugSeriousMap.get(element.getBugType()));
}
下面这段代码,首先构造人员信息。
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分钟时间,没得搞。还是做罢。
这样的开发方式怎么会有效率呢……
分享到:
相关推荐
进一步增大缓存到50,可以看到插入性能继续提升。在这种情况下,序列生成器在内存中持有50个序列值,减少了更多的系统调用,使得插入52505行数据仅需1.05秒(与缓存为10时相当)。redo log的大小虽然比缓存为0时少,...
DANN模型的训练质量得到提升,使用未标注数据辅助训练的方法也显著提升了小规模标注数据集上模型的性能,F1值提升0.023,且随着未标注数据量的增加,性能继续提升。 综上所述,本文的研究深入到深度学习和自然语言...
这意味着随着模型容量的增加,性能继续提升。这种方法对于缓解深度学习模型对大量标注数据的依赖,以及推动计算机视觉领域的进步,具有重要的意义。 总结来说,MAE是一种创新的自监督学习框架,通过遮挡图像并重建...
### 性能测试从零开始LoadRunner入门与提升 #### 一、LoadRunner简介 LoadRunner是一款由Micro Focus公司开发的性能测试工具,主要用于评估软件系统在压力下的表现。它可以帮助开发者和测试工程师识别和解决应用...
标题中的“利用Jactor提升日志系统的性能”指的是在日志系统中应用Jactor这一工具或框架,以优化日志处理的效率。Jactor可能是专为处理日志数据设计的一个并行计算库,旨在利用多核处理器的优势,提高日志收集、存储...
Cortex-A15 是 ARM 公司推出的一款高性能、低功耗的微处理器架构,是基于 ARMv7-A 架构的变体,首次引入了多核心设计,对移动计算领域带来了革命性的提升。这款处理器在2011年发布,其主要目标市场包括高端智能手机...
标题提及的"Log4j的AsyncAppender能否提升性能"是一个关键的问题,因为传统的Log4j Appender在记录日志时会阻塞应用程序的执行线程,导致性能下降。AsyncAppender的出现就是为了应对这个问题,通过异步处理日志,它...
课程重点介绍了分布式系统的性能优化技术。通过学习课程资料和实践项目,我...这门课程对于我职业发展和提升技术能力起到了重要的推动作用,我将继续深入学习和应用所掌握的知识,不断提升自己在分布式系统领域的能力。
本文将详细介绍SQL查询优化的策略和技巧,并通过实例代码展示如何提升查询性能。 SQL查询优化是一个持续的过程,需要对数据库系统有深入的了解和细致的调整。通过本文的探讨,我们了解到了查询优化的重要性、执行...
对于未来,继续优化数据库配置和日志管理将是提高系统性能的关键。 附件一提供了详细的实测数据,包括DAO层查询、后端封装、网络传输、前端解析和绘图渲染等各环节的时间消耗,为后续性能调优提供了具体参考。通过...
在 Nginx 中,线程池的引入是为了应对异步、事件驱动模型中出现的阻塞操作问题,从而显著提高服务器...这使得 Nginx 能够在处理大量并发请求时保持高性能,尤其在面临需要长时间处理的任务时,性能提升可达 9 倍之多。
【微处理器助推CNC性能提升】 微处理器在数控(CNC)系统中的应用极大地提升了CNC机床的性能和功能。随着计算机技术的进步,微处理器逐渐成为CNC系统的核心,为精密的机械加工提供了强大动力。微处理器的发展不仅...
### 分布式计算在云平台AI应用中的性能提升 #### 分布式计算架构对云平台AI性能的影响 在云计算环境中,分布式计算架构是提升AI应用性能的关键因素之一。通过将计算任务分散到多个节点上执行,可以显著提高计算...
内存超频是计算机硬件爱好者和专业用户为了提升系统性能而常用的一种技术,它涉及到计算机内存(RAM)的工作频率。内存超频主要是通过提高内存的工作速度,使得数据传输速率加快,从而提升系统的整体运行效率,特别...
限速装置确保提升速度不超过规定值,深度指示器失效保护装置在指示器失效时自动断电,闸间隙保护装置监测闸间隙,松绳保护装置在钢丝绳松弛时触发,满仓保护装置防止仓满时继续装载,而减速功能保护装置则在容器接近...
ChatGPT 技术如何提升对话系统的交互性能 ChatGPT 技术是基于 Generative Pre-trained Transformer...ChatGPT 技术是提升对话系统交互性能的重要工具,它具有广阔的应用前景和潜力,将继续推动人工智能的发展和创新。
本篇内容将深入探讨如何提升Java的锁性能,结合Java开发的经验技巧,帮助开发者优化并发代码。 1. **了解锁的类型** - **内置锁(Synchronized)**:Java中的内置锁是通过关键字`synchronized`实现的,它提供了对...
### 使用超线程提升处理器性能 #### 超线程技术概述 超线程(Hyper-Threading, HT)是英特尔公司推出的一种多线程技术,它使得单个物理处理器核心可以同时处理多个线程,从而提高了处理器的利用率和整体系统的性能...