我正在尝试在Web服务器中上载Excel文件并在服务器中对其进行处理。我正在使用Apache POI库来解析excel文件。我正在使用以下代码-

XSSFWorkBook workBook = new XSSFWorkBook(multiPartFile.getInputStream());


服务器堆大小设置为2gb。如果excel文件的大小很小(例如-250 Kb),那么没问题,但是对于负载测试,我尝试使用12 Mb excel文件进​​行了尝试,但由于OutOfMemory错误而失败。

我知道从InputStream创建工作簿确实是一项内存消耗大的操作。那么,有没有更好的方法从InputStream构建XSSFWorkBook?

最佳答案

XSSFWorkbook可以“设计”用完一些内存,因为它提供了对所有工作表/行/单元格的完全随机访问。

有一些方法可以使用更多可预测的内存使用量,因此它们提供的功能较少或需要您做更多的工作。

看一下示例XLSX2CSV,该示例使用流式XLSX解析器读取信息,因此即使对于非常大的文档也可以以非常低的内存开销运行。

在编写大文件方面,Apache POI提供了SXSSFWorkbook,它允许编写庞大的电子表格而无需大量内存。

09-27 02:22