繁体   English   中英

'OutOfMemoryException'读取20mb XLSX文件

[英]'OutOfMemoryException' reading 20mb XLSX file

我正在使用NPOI处理Excel文件。 这是我读取文件的方式:

using (FileStream stream = File.OpenRead(excelFilePath))
{
    IWorkbook wb = WorkbookFactory.Create(stream);
    ...
}

但是,对于任何大于几兆字节的XLSX文件,它都会导致内存使用量飙升至大约1GB,并最终引发OOM异常。

经过一些研究,我发现奇怪的是,从文件而不是从流加载工作簿可以减少POI的内存消耗。 以下是与我使用文件提供的Java示例最接近的C#:

OPCPackage pkg = OPCPackage.Open(new FileInfo(excelFilePath));
XSSFWorkbook wb = new XSSFWorkbook(pkg);

但是它似乎使用了相同的基础实现,因为内存使用率仍然相同并且会导致OutOfMemory异常。

NPOI是否有内置处理大XLSX文件的内容?

也欢迎提出关于可同时处理XLS和XLSX文件的替代库的建议。

似乎XLSX支持在NPOI中是相当新的,它根本无法处理大文件。

在尝试了一些库之后, EPPlus能够毫不费力地处理大型XLSX文件,因此我最终决定拥有两个用于读取Excel文件的库,其中NPOI用于XLS,EPPlus用于XLSX。

作为替代库的建议, Apache POI是一个很好的库。 我已经将它广泛用于XLSX和XLS文件,并且效果很好。 这是对文件进行快速测试的要点

Apache POI唯一无法涵盖的格式是可以使用Xelem代替的旧格式XML文件。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM