我在Java项目中使用BIRT运行时4.8.0生成Excel报告。 excel报告具有1k列,并且可以具有1万至5万行(1个查询的结果,映射到1个表)。我正在使用spudsoft ExcelEmitter呈现静态excel报告。
数据源:Impala jdbc连接,使用1个数据集和1个查询
问题在于,仅要在此报告中呈现1万行,就需要6至7GB的堆空间(java),以便将所有内容加载到内存中,然后将其写入文件中。
在渲染excel工作表(诸如查询结果分页,部分渲染文件等选项)时,有什么方法可以减少内存占用(可预测的堆空间使用情况,最好在3GB以下)?
答案 0 :(得分:0)
我能够直接使用Apache POI Streaming APIs为大型数据集(5万行和1k列的顺序)生成excel。 Aspose APIs是执行此操作的另一个好工具。
使用POI流式API,您可以在不到1GB的峰值内存使用量的情况下,在一分钟或两分钟内显示5万行,1k列的订单。
因此,如果您扩展Spudsoft excel emitter以使用POI流式API,那么也可以使用BIRT对其进行处理。
答案 1 :(得分:0)
我用新版本的spudsoft发射器解决了它。 这将apache poi从xssf更改为sxssf:
ExcelEmitter.ExtractMode 实验功能!设置为true时,发射器对于XLSX文件应运行得更快,但功能集有限:
https://www.eclipse.org/forums/index.php/m/1804253/#msg_1804253
答案 2 :(得分:0)
使用下面的代码将限制设置为15K。这解决了我的问题。
++++----+--+4