我想使用EPPlus库生成excel报告。这是我在初始化中加载文件的代码:
ExcelPackage pkg = new ExcelPackage(new FileInfo(filePath));
由于我的报告中存在大量数据,因此我面临OutOfMemoryException
。 codeproject article描述了如何创建大型Excel报告。作者的方法是将部分数据的报告保存到Excel文件中,关闭包然后重新打开excel文件并向其添加另一部分数据等等。我将此应用于我的项目:
//Going to save log package.
pkg.Save();
//Package saved and Disposed.
var fileInfo = pkg.File;
//Again loading file into package...
pkg.Load(new FileStream(fileInfo.FullName, FileMode.Open));
这里的要点是,当我保存包裹时,它将自动处理。在处理之后,我认为内存将被释放,但是当我看到任务管理器时,它不会发生。之后我再次加载excel文件as discribed in another post in stackoverflow。
答案 0 :(得分:0)
您无法通过简单地释放对象来控制垃圾收集。即使调用GC.Collect()也不能保证释放内存。
我使用EPPlus定期生成超过30,000行的电子表格,包含20列或更多列,其中一些包含重要的文本字符串和复杂的公式。当EPPlus使用MS zip打包器时,我曾经遇到过一些内存问题,但后来的版本没问题。
所以尽早发布,但不要期望任务经理快速做出反应。
另一种策略是不使用内存流进行输出。写入磁盘而不是。如果您在IIS上生成电子表格,则可以将浏览器重定向到临时文件,或者在生成工作簿并且您已发布EPPlus对象后打开并将文件流式传输到Response。 / p>