过度使用子报表会增加报表的资源需求。每个子报表在填充时间产生自己的线程。此外,如果您使用的是 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 中,可以在选项 -> 设置中配置虚拟器。
我希望这是有帮助的。
卢克