JasperReport - 占用太多资源

时间:2009-01-23 10:53:05

标签: java jasper-reports

所以,问题是我们在JasperReport Dialog中向用户创建的文档显示。用户可以按打印图标并将其发送到打印机。

在所有三个级别上,客户端的计算机上似乎占用了太多资源:创建报告,在屏幕上显示报告并将其发送到打印机。一个示例PC是AMD Duron 800MHz,具有256MB RAM,因此我们需要了解是否可以进行一些优化以获得更好的用户体验。

它还需要在具有2GHz处理器和1GB RAM的“普通”计算机上占用大量资源,因此我需要查看是否有一个选项可以调整JasperReport以减少对资源的影响。

2 个答案:

答案 0 :(得分:5)

过度使用子报告会增加报告的资源需求。每个子报表在填充时间内产生自己的线程。此外,如果您正在使用scriptlet或帮助程序类,请确保正确清理它们创建的所有资源。还要确保您使用的是最新的JR软件包。

一个注意事项。 JR api包含一组虚拟器。填写报表时,整个填充的报表将创建为对象(JasperPrint)。根据报表中的页数,此对象可能会变得非常大。可以将虚拟器配置为在达到设置的页面阈值时写入文件系统。

通常,这会降低总体内存使用量,但会增加填充时间。一个包可能是gzip虚拟器,而不是写入文件系统,使用gzip压缩生成的对象。

以下是有关该主题的常见问题解答: http://community.jaspersoft.com/wiki/support-large-reports

它所引用的例子可以通过下载JR源获得。

http://sourceforge.net/project/showfiles.php?group_id=36382&package_id=28579

从高级视图来看,如果您在应用程序中运行此报告,则可以实例化虚拟器(此处是列出已知实现类的接口): http://jasperreports.sourceforge.net/api/net/sf/jasperreports/engine/JRVirtualizer.html

然后在填充时使用引用:

        JRDataSource ds = new JREmptyDataSource(10);
        JRFileVirtualizer virtualizer = new JRFileVirtualizer(2, "tmp");
        JasperPrint jasperPrint = fillReport(fileName, ds, virtualizer);

如果您在iReport中,可以在选项中配置虚拟器 - >设置。

我希望这有用。

答案 1 :(得分:1)

好的Jasper Reports只是一个jar,所以你需要更具体一点:你是在Web应用程序中运行JasperReports(在Tomcat,Glassfish,JBoss等)还是在iReport中运行它?

如果你在appserver中运行它,我能想到的最明显的事情是确保你使用正确的报告编译器,即JDT编译器。绝对要确保你没有使用teh beanshell编译器。它太慢了。