首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >EPPlus多次保存

EPPlus多次保存
EN

Stack Overflow用户
提问于 2013-02-20 19:44:48
回答 2查看 1.4K关注 0票数 6

我正在使用asp.net + C#中的EPPlus库来创建.xlsx文件。我的文件可能包含几百万条记录,并且我每100K条记录创建一个ExcelWorksheet。问题是,一个包含几乎1.5M记录的40Mb xlsx可能会占用多Gbs的主内存,之后我会得到一个OutOfMemoryException,问题是:我如何才能减少占用X Gb for 40M?:-|的内存,或者逐渐地保存ExcelPackage并释放内存,(似乎我不能保存多次,在整个包被释放之后)。

如果没有解决方案,有没有人可以介绍一种EPPlus的替代方案(几乎所有的功能,如样式、工作表等)

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-06-30 16:42:26

这个问题似乎在最新版本的EPPlus (4.0.x)中得到了解决。

编辑:添加指向EPPlus 4.0.4中改进的内存管理的页面的引用链接。

用户对4.x版与3.x版相比内存性能有所提高的https://epplus.codeplex.com/releases/view/118053#ReviewsAnchor 评论。

https://epplus.codeplex.com/wikipage?title=Roadmap 4.0版:新的cellstore改进了插入、删除性能和内存消耗

这个链接解释了如何确保加载大量的单元格是优化的。

http://epplus.codeplex.com/wikipage?title=FAQ&referringTitle=Documentation Refer部分“我有很多数据要加载。我应该考虑什么才能获得最佳性能?”

另外,我今天亲自测试了Windows4.0.4,一次写出了150万条记录,包括5个数字行和1个DateTime行,而Windows Task Manager报告的峰值内存工作集只有711MB。Windows任务管理器显示的非分页池只有75K左右!当然,我不确定这些数字是否反映了内存占用的全部影响,但这些只是指示性的。输出的Excel文件大小约为59MB (可能是我的列数超过了您在原始帖子中提到的示例数据)。

注意:当我试图一次写7列的450万条记录时,我得到了一个"OutOfMemoryException“!

我的测试够严格了吗?不过,也许not...Works对我来说很好。

但是,为了克服早期版本中的大内存需求,我能想到的一种解决方法是为每100K条记录拆分并保存一个xlsx文件。保存后,开始对下一个100K记录使用新文件(具有适当的文件名计数器增量)。

在操作结束时,您最终将拥有10个100K记录的文件,假设总共有100万条记录。

这看起来可能有点麻烦,但是嘿,可能比不得不重写你的代码库来使用其他库(免费的或商业的)要好。

票数 5
EN

Stack Overflow用户

发布于 2014-12-23 11:43:58

如果您在导出过程中尝试保存并关闭文件,然后调用垃圾收集,您将看到,消耗的内存将被释放。但是,如果您随后将尝试再次打开该文件,则该进程将消耗相同数量的内存。如果你试图继续你的出口加工,你会再次陷入同样的问题。

AFAIK所有基于Open XML SDK的现代.NET库都在内存中执行处理。EpPlus也是如此。唯一的方法是在硬盘上执行处理,而不加载到内存中。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14979041

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档