我在java项目中使用BIRT runtime 4.8.0来生成Excel报告。 excel报告有1k列,可以有10k到50k行(1个查询的结果,映射到1个表)。我正在使用spudsoft ExcelEmitter来呈现静态excel报告。
数据源:Impala jdbc连接,使用1个数据集和1个查询
问题是,在此报告中只需要渲染10k行就需要6到7GB的堆空间(java),以便将所有内容加载到内存中,然后将其写入文件。
有没有办法在渲染Excel工作表时减少内存占用(可预测的堆空间使用量最好低于3GB)(选项如分页查询结果,部分渲染文件等)?
通过直接使用Apache POI Streaming APIs,我能够为大型数据集(50k行和1k列的顺序)生成excel。 Aspose APIs是另一个很好的工具。
使用POI流API,您可以使用50k行的顺序渲染Excel,1k列,大约1分钟或2GB的峰值RAM使用率。
因此,如果您扩展Spudsoft excel emitter以使用POI流API,那么它也可以使用BIRT进行处理。
我用新版本的spudsoft发射器解决了这个问题。这会将apache poi从xssf更改为sxssf:
ExcelEmitter.ExtractMode实验功能!设置为true时,XLSX文件的发射器运行速度应该更快,但功能集有限:
https://www.eclipse.org/forums/index.php/m/1804253/#msg_1804253