POI 性能
2022-09-02 03:09:14
我正在 J2EE Web 应用程序中使用 POI 来生成工作簿。但是,我发现POI需要大约3分钟才能创建一个具有25K行(每行约15列)的工作簿。这是POI性能问题,还是花费那么多时间是合理的?是否有其他已知具有更好性能的 API?
我正在 J2EE Web 应用程序中使用 POI 来生成工作簿。但是,我发现POI需要大约3分钟才能创建一个具有25K行(每行约15列)的工作簿。这是POI性能问题,还是花费那么多时间是合理的?是否有其他已知具有更好性能的 API?
如果您使用“流式”POI API 而不是标准 POI API,则使用 POI 写入大型文件的性能可能会大大降低。实际上,默认情况下,POI会将所有数据保留在内存中,然后在最后一次性写入所有数据。对于大文件,这种内存占用可能大得离谱。您可以使用流式处理 API 来控制内存的使用方式以及数据逐步写入磁盘的方式。
要创建流式处理工作簿,请使用类似下面的内容:
SXSSFWorkbook book = new SXSSFWorkbook();
book.setCompressTempFiles(true);
SXSSFSheet sheet = (SXSSFSheet) book.createSheet();
sheet.setRandomAccessWindowSize(100);// keep 100 rows in memory, exceeding rows will be flushed to disk
// ...
如果看到POI花费这么多时间来生成这样的文件,我会感到非常惊讶。我刚刚在大约18秒内生成了一个包含30000行x 10个单元格的工作表(公平地说,没有格式)。原因可能是以下原因之一: