根据业务功能,我们需要在多线程环境中的不同位置读取多个excel文件(.xls和.xlsx格式)。每个线程负责读取文件。为了测试性能,我们创建了两个.xls和.xlsx格式的文件集。一个文件集只有20行数据,而其他文件集包含300,000行数据。我们能够成功读取.xls格式的两个文件并将数据加载到表中。即使对于20行数据.xlsx文件,我们的源代码也能正常工作。 但是当执行流程开始读取.xlsx文件时,应用程序服务器会突然终止。当我开始追查这个问题时,我一直都是 在创建 XSSFWorkbook 实例时遇到一个奇怪的问题。请参阅下面的代码段:
OPCPackage opcPackage = OPCPackage.open(FILE);
System.out.println("Created OPCPackage instance.");
XSSFWorkbook workbook = new XSSFWorkbook(opcPackage);
System.out.println("Created XSSFWorkbook instance.");
SXSSFWorkbook sxssfWorkbook = new SXSSFWorkbook(workbook, 1000);
System.out.println("Created SXSSFWorkbook instance.");[/code]
输出
Process XLSX file EXCEL_300K.xlsx start.
Process XLSX file EXCEL.xlsx start.
Created OPCPackage instance.
Created OPCPackage instance.
Created XSSFWorkbook instance.
Created SXSSFWorkbook instance.
Process XLSX file EXCEL.xlsx end.
对于较大的文件集,执行挂起 XSSFWorkbook工作簿=新的XSSFWorkbook(opcPackage); 导致堆空间问题。请帮我解决这个问题。
提前致谢。
谢谢,
桑卡尔。
答案 0 :(得分:0)
在尝试了很多解决方案后,我发现处理XLSX文件需要大量内存。但使用POI 3.12库有很多优点。