在使用EPPlus Excel Library时分配的内存很大

上下文

我一直在使用EPPLUS作为自动生成excel报告的工具,使用C#作为库的客户端语言。

问题:

在尝试编写一个非常大的报表(SQL查询的响应)和数据透视表,图表等等之后,我最终得到了一个Out of Memory Exception

故障排除

为了排除故障,我决定打开一个有138MB的现有报告,然后使用GC对象来查看我记忆中正在发生的事情,这里是结果。

 ExcelPackage pkg = new ExcelPackage (new FileInfo (@"PATH TO THE REPORT.xlsx")); ExcelWorkbook wb = pkg.Workbook; 

垃圾收集结果,在第二行代码之前,之后。

记忆的使用量太高了

所以,我从现在开始不知道该怎么做。 我所做的只是打开报告,这个报告在记忆中占据报告大小的10倍(实际上是9.98倍)。

excel文件〜138MB,占用RAM的1.370.817.264字节。

更新一:

EPPlus有一个相当新的testing版本,它有更新日志:

 New Cell store * Less memory consumtion * Insert columns (not on the range level) * Faster row inserts 

在更新Nuget之后,我仍然有相同的exception,在第一行之后抛出,而不是在第二行中引发。

现代Excel文件,即Xlsx文件是压缩的,通常压缩到10%。 我只是解压缩一个1.6MB的文件,我使用类似的工具生成的,发现它提取到18.8 MB的数据。

你有一个0.138 GB的文件,使用1.370 GB的内存,这几乎是10%。 内存中的未压缩表示就是吃掉你的记忆。

如果您好奇,可以使用7-Zip等工具来提取Xlsx文件,也可以将文件重命名为以.zip格式结尾并在Windows中浏览。