excel导出加水印内存溢出问题解决思路

问题

我们经常可以发现,有些excel导出功能在没有加水印的情况下很快就能导出即如果,一旦加了水印之后就会变得非常的慢甚至是会造成内存异常的严重问题。

原因

那这是啥原因造成的呢,通过观察代码我们建议发现加水印的情况下需要开启inMemory内存处理模式才可以成导出加水印的信息,在大数据量导出的同时加上水印会消耗大量的内存,那么我们只要避免开启内存模式就能解决这个问题。

解决方案

我们可以把加水印导出拆分成两个阶段来解决这个问题

第一阶段:生成一个带水印的空数据模版文件,虽然这个阶段是需要开启内存模式,但是因为没有结合数据导出,这个文件可以很快生成而且没有太多的性能消耗

第二阶段:将数据导出导已经生成好的模版文件中,因为模版中已经有水印了,这个阶段就无需开启内存模式,因此速度和性能消耗跟正常的导出基本没啥差别

下面用一个100万条数据导出的示例来比较不加水印导出、正常加水印导出和临时水印模版导出

构造100万的导出数据

  • 不加水印导出:

正常加水印导出:

正常加水印导出,不仅耗时长,并且报了内存溢出的异常

临时水印模版导出:

可以看到,耗费的时间与不加水印的导出耗费时间相差无几

这里主要是提供一个解决问题的思路,具体的代码怎么写最好自己去研究研究,这样才会有助于自己的进步。我建议是使用easyexcel工具导出,不管是使用文件模版还是定义Java类模版都可以实现上述的方案,主要的难度是在于怎么生成那个带水印的空数据模版。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值