C# NPOI读取Excel文件导致OutOfMemoryException的问题

当使用C#读取Excel文件时,如果记录数过多,可能会抛出OutOfMemoryException异常。Apache POI提供的WorkbookFactory提供了解决方案。通过使用File而不是InputStream来创建Workbook,可以显著降低内存消耗。例如,可以使用`WorkbookFactory.create(new File(MyExcel.xls))`代替`WorkbookFactory.create(new FileInputStream(MyExcel.xlsx))`,这样能有效防止内存溢出问题。实践证明,这个方法能够成功解决大量数据读取时的内存问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

C#读取Excel文件时,如果Excel文件的记录数比较多,可能导致OutOfMemoryException异常。

查了一下资料在这里找到了解决办法:

http://poi.apache.org/components/spreadsheet/quick-guide.html#FileInputStream

Files vs InputStreams

When opening a workbook, either a .xls HSSFWorkbook, or a .xlsx XSSFWorkbook, the Workbook can be loaded from either a File or an InputStream. Using a File object allows for lower memory consumption, while an InputStream requires more memory as it has to buffer the whole file.

If using WorkbookFactory, it's very easy to use one or the other:

// Use a file
Workbook wb = WorkbookFactory.create(new File("MyExcel.xls"));
// Use an InputStream, needs more memory
Workbook wb = WorkbookFactory.create(new FileInputStream("MyExcel.xlsx"));

从上面的注释可以看出,用FileInputStream方式打开,使用内存比较多,用File方式打开,使用内存较少。

按上面的办法,问题果然得到解决。在此记录一下,希望对各位有所帮助。

 

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值