C# 使用epplus从数据库生成大型Excel报表

C# 使用epplus从数据库生成大型Excel报表,c#,excel,report,epplus,C#,Excel,Report,Epplus,我想使用EPPlus库生成excel报告。以下是我在初始化中加载文件的代码: ExcelPackage pkg = new ExcelPackage(new FileInfo(filePath)); 由于我的报告中有大量数据,我面临OutOfMemoryException。描述如何创建大型excel报表。作者的方法是将部分数据的报告保存到Excel文件中,关闭软件包,然后重新打开Excel文件并向其中添加另一部分数据,依此类推。我将此应用于我的项目: //Going to save log p

我想使用EPPlus库生成excel报告。以下是我在初始化中加载文件的代码:

ExcelPackage pkg = new ExcelPackage(new FileInfo(filePath));
由于我的报告中有大量数据,我面临
OutOfMemoryException
。描述如何创建大型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文件。

您不能通过简单地释放对象来控制垃圾收集。即使调用GC.Collect()也不能保证释放内存

我使用EPPlus定期生成超过30000行的电子表格,其中包含20列或更多列,其中一些包含重要的文本字符串和复杂的公式。我曾经在EPPlus使用MS zip packager时遇到一些内存问题,但后来的版本没有问题

所以一定要尽早发布,但不要期望任务管理器做出快速反应


另一种策略是不将内存流用于输出。改为写入磁盘。如果您在IIS上生成电子表格,您可以将浏览器重定向到临时文件,或者在生成工作簿并释放EPPlus对象后打开文件并将其流式传输到响应。

感谢您的响应,但我如何
不使用内存流进行输出。改为写入磁盘