Uch*_*uke 6 .net c# export-to-excel epplus
我正在使用EPPlus库asp.net + C#来创建.xlsx文件.我的文件可能包含几百万条记录,我ExcelWorksheet每100K条记录创建一条.问题是40Mb包含几乎1.5M记录的xlsx 我需要多个Gbs的主内存,然后我得到一个OutOfMemoryException,问题是:我怎样才能减少占用的内存X Gb for 40M?: - | 或ExcelPackage逐渐保存并释放内存,(似乎我不能保存不止一次,并且在整个包装被丢弃之后).
如果没有解决方案,任何人都可以为EPPlus引入替代品(几乎所有功能,如样式,工作表等)
多次保存不会有帮助。如果您尝试在导出过程中保存并关闭文件,然后调用垃圾收集,您将看到消耗的内存将被释放。但是,如果您随后尝试再次打开该文件,该进程将消耗相同数量的内存。如果您尝试继续出口处理,您将再次陷入同样的问题。
AFAIK 所有基于 Open XML SDK 的现代 .NET 库都在内存中执行处理。EpPlus 也是如此。唯一的方法是在硬盘上执行处理而不加载到内存中。
最新版本的EPPlus(4.0.x)似乎已解决了该问题。
编辑:在页面上添加引用链接,指向在EPPlus 4.0.4中改进的内存管理。
https://epplus.codeplex.com/releases/view/118053#ReviewsAnchor 用户评论有关4.x版本与3.x版本相比内存性能有所提高的情况。
https://epplus.codeplex.com/wikipage?title= 路线图版本4.0:新的单元存储可改善插入,删除性能和内存消耗
该链接说明了如何确保优化加载巨大单元格的数量。
http://epplus.codeplex.com/wikipage?title=FAQ&referringTitle=文档 请参阅“我要加载的数据很多。要想获得最佳性能,我应该怎么看?”
另外,我今天亲自测试了EPPlus 4.0.4,通过一次性写出150万条记录(包括5个数字行和1个DateTime行),Windows Task Manager报告的峰值内存工作集仅为711 MB。Windows任务管理器显示的非页面缓冲池只有75K左右!当然,我不确定这些数字是否能充分反映内存占用的全部影响,但这些只是指示性的。输出的Excel文件约为59MB(可能是我的专栏超出了您在原始帖子中提到的示例数据。)
注意:当我尝试一次写入7列的450万条记录时,我确实得到了“ OutOfMemoryException”!
我的测试足够严格吗?也许...虽然对我来说效果很好。
但是,我可以想到的一种克服早期版本中大内存需求的解决方法是为每100K条记录拆分并保存一个xlsx文件。保存后,开始为下一个100K记录使用一个新文件(具有适当的文件名计数器增量)。
在操作结束时,您最终将拥有10个10万条记录的文件,例如总共100万条记录。
可能看起来有些骇人听闻,但嘿,可能要比使用某些其他库(免费或商业版)重写代码库更好。
| 归档时间: |
|
| 查看次数: |
1184 次 |
| 最近记录: |