首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >JasperReports: fillReport非常慢

JasperReports: fillReport非常慢
EN

Stack Overflow用户
提问于 2014-06-19 23:16:46
回答 1查看 2.2K关注 0票数 2

我们使用此代码从XML输入生成PDF报告。它非常慢(在Solaris T5220上,处理280K行需要2小时;处理70K行需要10分钟)。

代码语言:javascript
运行
复制
DocumentBuilder docBuilder = docBuilderFactory.newDocumentBuilder();
FileInputStream fileStream = new FileInputStream(rawXmlFile);
ds = docBuilder.parse(fileStream);

Map<String, Object> params = new HashMap<String, Object>();
params.put(JRXPathQueryExecuterFactory.PARAMETER_XML_DATA_DOCUMENT, ds);
params.put(JRXPathQueryExecuterFactory.XML_DATE_PATTERN, com.vodafone.gdsp.reporting.enums.xml.DateFormat.DATE_FORMAT_ISO8601);
params.put(JRXPathQueryExecuterFactory.XML_NUMBER_PATTERN, "##0.##");
params.put(JRXPathQueryExecuterFactory.XML_LOCALE, Locale.ENGLISH);
params.put(JRParameter.REPORT_LOCALE, Locale.UK);
params.put("REPORT_DIR", jasperFile.substring(0, jasperFile.lastIndexOf("/")));

try {
    virtPageSize = Integer.parseInt(reportConfig.getJasperVirtPageSize());
    virtPageDir = reportConfig.getJasperVirtPageDir();
} catch (NullPointerException npe) {
    logger.info("Virtual page size and directory not assigned, using the default value of virtPageSize {} and virtPageDir {}", virtPageSize, virtPageDir);
} catch (Exception ex) {
    logger.error("Exception while fetching virtual page size and directory {}", ex.getMessage());
}
logger.info("Using Jasper virtual parameters ({}, {})", virtPageSize, virtPageDir);

JRFileVirtualizer virtualizer = new JRFileVirtualizer(virtPageSize, virtPageDir);
JRVirtualizationHelper.setThreadVirtualizer(virtualizer);
params.put(JRParameter.REPORT_VIRTUALIZER, virtualizer);

DefaultJasperReportsContext context = DefaultJasperReportsContext.getInstance();
JRPropertiesUtil.getInstance(context).setProperty("net.sf.jasperreports.xpath.executer.factory",
    "net.sf.jasperreports.engine.util.xml.JaxenXPathExecuterFactory");

File jasperReport = new File(jasperFile);
JasperPrint jasperPrint = JasperFillManager.fillReport(new FileInputStream(jasperReport), params);

正如您所看到的,这确实包括"use Jaxen“属性-但在使用Jaxen和不使用Jaxen时,没有观察到性能上的差异。因此,要么是我们的"use Jaxen“配置不正确,要么是我们遇到了不同的问题。

有没有其他人遇到过这个问题并解决了它?有没有人对如何确定问题有任何建议?-我已经打开了日志记录,但日志记录并不是非常详细,除非涉及到逐行详细的日志记录内容-没有人说“我已经看到了'use Jaxen‘指令,并将使用Jaxen”或其他类似的东西。

非常感谢!

更新:当我在我的笔记本电脑( Windows 7系统)上运行这个报告时,280K报告在16分钟内运行;当我在我的笔记本电脑上使用Xalan而不是Jaxen运行相同的报告时,我在08:00启动了它,现在是15:00,它还没有完成;因此Jaxen库是我需要的。

我不明白的是,为什么在Solaris10和T5220上运行时完全没有区别。我将深入研究RAM等等--可能存在资源限制。如果任何人遇到过这种情况,我仍然感谢任何人的建议。

EN

回答 1

Stack Overflow用户

发布于 2014-10-28 21:49:49

我也有同样的问题。一个330ko (2k行)的xml需要9800ms,如果我使用Jaxen,它的takes41为000ms。所以我想知道当前的JR 5.6.1版本是否已经解决了这个问题。但是如果我使用11 114ko (65536行)运行Q xml,则需要1.7个小时!DOM运行太慢,占用大量内存。因此,我认为它可能应该改为另一种解析方法。SAX:http://blog.synyx.de/2012/08/big-jasper-reports-with-custom-xml-datasource/

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24310162

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档