在使用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中浏览。