当前位置: 首页 > 面试题库 >

JasperReports fillReport太慢且消耗资源

姬坚成
2023-03-14
问题内容

我发现从Java应用程序填充报告时,JasperReports确实很 。程序挂在此行:

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

它通常在那里停留 3分钟,消耗高达300Mb的RAM和50%的CPU

  • report 是使用3个子报表的已编译(.jasper)报告。
  • 数据源是一个很大的XML文件(大约10万行,1.5Mb)
  • 该机器是具有4Gb RAM的3Ghz双核

那么,如何改善报表填充性能?


问题答案:

问题

看来问题出在XPath引擎上。即,解析XML文件以查找数据的库。

当iReport Designer使用 Jaxen时 ,JasperReport使用 Xalan
。与Jaxen相比,Xalan真的很慢(真的很慢)。

这就是为什么仅在从Java应用程序而不是从iReports填充报表时才会出现此问题的原因。

解决方案

好了,解决方案很简单, 只需在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

Xalan用3到5分钟填充报告,而Jaxen现在只需几秒钟即可完成报告。

在这里找到了答案:http : //community.jaspersoft.com/questions/536842/jasperreports-too-
slow
而且在这里:http : //community.jaspersoft.com/wiki/xml-data-source-very-slow
-解析



 类似资料:
  • Android Studio在Mac机上消耗了太多的内存,并且还运行了多java进程。 Android Studio版本:使用Android Studio北极狐2020.3.1(补丁1构建#AI-203.7717.56.2031.7621141,构建于2021年8月7日) 当我面临内存不足的问题时,我正在监视Android Studio的内存消耗,我注意到多个“Java”进程正在运行,甚至一个进程

  • 我需要以下令牌: 允许的字符包括大写、小写、数字、空格和连字符 长度不固定(长度必须至少为两个字符) 标记必须至少包含一个空格或连字符 令牌必须以大写、小写、数字、空格或连字符开头和结尾(不能以空格开头或结尾) 下面语法中的ANTLR lexer规则“alphanumericspacehyphen”除了一个情况外几乎都起作用。使用解析器规则“sic”进行测试,以下输入将解析(不带引号): 以下输入

  • 自从我安装了android studio,它从来没有Eclipse快。每当我开始调试时,在设备上开始调试和运行应用程序通常需要1-2分钟。 问题:我想知道如何解决这个问题(安装windows 64位或安装其他类型的android studion或...) 我的系统配置如下所示: 配备Core i5 cpu的笔记本电脑, Windows 8.1 32位 3GB可用RAM Android Studio

  • 问题内容: 我的问题: 当线程处于状态(非休眠)> 99.9%的时间时,JVM中的大量线程是否会消耗大量资源(内存,CPU)吗?当线程正在等待时,如果根本需要维护它们,需要花费多少CPU开销? 答案是否也适用于与非JVM相关的环境(例如linux内核)? 内容: 我的程序收到大量占用空间的程序包。它在不同的程序包中存储相似属性的计数。在收到包裹后的给定时间(可能是数小时或数天)之后,该特定包裹将过

  • 我在spring boot中创建了一些服务,我有11个fat jars,我将它们部署在docker容器中,我怀疑每个jar在没有任何使用的情况下消耗了1到1.5 GB的RAM,我通过运行以下命令来检查RAM: 起初我以为是java容器,我试图改成一个使用alpine的容器,但没有任何变化,所以我认为唯一的问题是我的罐子。有没有办法更改罐子正在使用的 RAM?或者这种行为是正常的,因为每个罐子都有一

  • 我有一个Kafka流应用程序,它从几个主题中获取数据,并将数据加入另一个主题。 Kafka配置: 注意:我在运行Kafka Brokers的机器上运行Kafka Streams应用程序。 每小时消耗/产生数百万条记录。每当我让Kafka经纪人倒下时,都会进入再平衡阶段,再平衡大约需要30分钟,有时甚至更长时间。 有人知道如何解决Kafka消费者的再平衡问题吗?而且,很多时候,它在重新平衡时抛出异常