语境巨大的内存分配
我一直在使用EPPLUS作为我的工具使用C#作为该库的客户端语言,使Excel自动生成报表。
问题:
试图写一个非常大的报告(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字节。
更新一:
有一个相当新的beta version of EPPlus这是指出,有它的changelog:
New Cell store
* Less memory consumtion
* Insert columns (not on the range level)
* Faster row inserts
更新的NuGet后,我仍然有相同的例外,那就是后抛出第一行,而不是在第二行提出。
我刚刚提取了〜138MB的报告(.xlsx),并且它最终在磁盘上有0.99 GB。你能想到任何“便宜”的方式吗? –
@MarcelloGrechiLins您可以使用Streams手动创建XML文档,而不是将其全部内容一次写入内存。在某些情况下,您必须将其全部压缩,您可以使用处理较大文件的库来处理该部分。不幸的是,你会错过Excel的易用性。我想真正的问题是“为什么你有如此庞大的Excel文件”? – mason
@mason我正在做一个巴西“四大”电信公司之一的项目(不能说出它的名字)。这份报告负责显示客户的一部分,正如你所期望的那样,这个客户的数量是巨大的。 –