读取20MB XLSX文件的“OutOfMemoryException”
我正在使用NPOI来处理Excel文件。 以下是我正在阅读文件的方式:
using (FileStream stream = File.OpenRead(excelFilePath)) { IWorkbook wb = WorkbookFactory.Create(stream); ... }
但是,对于大于几兆字节的任何XLSX文件而言,这会导致内存使用量猛增至1GB左右,并最终导致OOMexception。
做一些研究,我发现 ,奇怪的是,从文件加载工作簿,而不是一个stream导致POI内存消耗更less。 与我提供的使用Files提供的Java示例等效的最接近的C#如下所示:
OPCPackage pkg = OPCPackage.Open(new FileInfo(excelFilePath)); XSSFWorkbook wb = new XSSFWorkbook(pkg);
但它似乎使用相同的底层实现,因为内存使用仍然是相同的,并导致OutOfMemoryexception。
NPOI是否有内置的用于处理大型XLSX文件的内容?
对可以同时处理XLS和XLSX文件的替代库的build议也值得欢迎。
看来XLSX的支持在NPOI中是相当新颖的,它现在还不能处理大文件。
在尝试了几个库之后, EPPlus能够顺利地处理大的XLSX文件,所以我终于决定在Excel文件中有两个库,XLS的NPOI和XLSX的EPPlus。
作为替代库的build议,一个好的是Apache POI 。 我已经广泛地使用了XLSX和XLS文件,它很好地完成了这项工作。 这是一个快速testing你的文件的要点 。
Apache POI不包含的唯一格式是可以使用Xelem的旧格式XML文件。