JasperReports的fillReport过于缓慢和资源消耗型(JasperReports f

2019-08-20 06:11发布

我发现,填充的JasperReports从Java应用程序的报告时,实在是太慢了。 该程序挂起,在这一行:

print = JasperFillManager.fillReport(report, parameters, xmlDataSource);

它通常在那里停留3分钟,消耗最多的RAM和50%的CPU 300MB。

  • report是使用3子报表编译(开发文件)的报告。
  • 数据源是一个相当大的XML文件(100K左右线,有1.5Mb)
  • 该机是一款3GHz的双核4GB内存

所以,我怎样才能提高报告的填充性能?

Answer 1:

问题

看来这个问题是XPath引擎。 也就是说,解析寻找数据的XML文件库。

虽然iReport的设计师使用Jaxen的 ,JasperReport的使用Xalan的 。 Xalan的实在是太慢了比较Jaxen的(真的很慢)。

这就是为什么问题源于iReports从Java应用程序填充的报告,而不是当只发生。

解决方案

好了,解决方法很简单, 只需添加下面一行在Java应用程序中选择Jaxen的LIB,而不是默认的Xalan LIB(它的过时,但它的工作原理):

JRProperties.setProperty("net.sf.jasperreports.xpath.executer.factory",
    "net.sf.jasperreports.engine.util.xml.JaxenXPathExecuterFactory");

编辑 :该行已被否决,我已经找到了正确的方法来设置属性:

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

您还需要添加Jaxen的的.jar到您的构建路径。 这里是一个链接: https://mvnrepository.com/artifact/jaxen/jaxen


虽然报告填充正在采取3-5分钟的Xalan,现在完成在短短的几秒钟Jaxen的。

答案在这里找到: http://community.jaspersoft.com/questions/536842/jasperreports-too-slow
和这里: http://community.jaspersoft.com/wiki/xml-data-source-very-slow-parse



Answer 2:

我也有这个问题,当我出口PDF,但对我来说这似乎是一个无限循环,因为CPU被击中100%,当我试图生成JasperReport的。

大量的研究后,我发现这个链接:

http://community.jaspersoft.com/questions/527078/infinite-loop-subreport-fill

这问题已经解决。我的设置子报表isPrintWhenDetailOverflows="false"



文章来源: JasperReports fillReport too slow and resource consuming