1

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

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

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

4

2 回答 2

6

过度使用子报表会增加报表的资源需求。每个子报表在填充时间产生自己的线程。此外,如果您使用的是 scriptlet 或 helpers 类,请确保它们创建的所有资源都被正确清理。还要确保您使用的是最新的 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/引擎/JRVirtualizer.html

然后在填充时使用参考:

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

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

我希望这是有帮助的。

卢克

于 2009-01-23T14:09:19.590 回答
1

好吧,Jasper Reports 只是一个 jar,因此您需要更加具体:您是在 Web 应用程序(在 Tomcat、Glassfish、JBoss 等上)中运行 JasperReports,还是在 iReport 中运行它?

如果您在应用服务器中运行它,我能想到的最明显的事情是确保您使用正确的报告编译器,即 JDT 编译器。一定要确保你没有使用 beanshell 编译器。它慢得要命。

于 2009-01-23T10:56:38.310 回答