POI-Excel表格生成速度优化

本文探讨了使用Apache POI生成Excel时的性能优化,包括分Sheet优化和Sheet内优化。通过将不同Sheet放入独立线程池处理,以及预先创建行并异步填充数据,成功将原本10秒生成1W行数据的时间降低到6秒,大幅提升了生成速度。
摘要由CSDN通过智能技术生成

从实际上看,笔者之前的项目用的Excel表格工具类,是一个单线程的工具类,执行效率比较慢。

在生成Sheet,1W行数据时,花费大概在10秒左右,多Sheet数据量叠加,时间开销也会线性叠加。


笔者项目用的框架是阿帕奇开源的POI,本篇文章的主体聚焦于优化的思路,如POI的使用、线程池细节、并发工具类的使用等,不在讨论范围。


在生产环境,通过以下优化之后,生成Excel的速度能快上好几倍(产品赶紧给我加鸡腿)。


分Sheet优化


Excel表格中,不同的sheet应该没有什么关联关系,起码对于笔者的项目是这样的。

所以优化的第一步,就是把不同的sheet放在不同的线程池中跑,伪代码如下:


void excel(){
   
  //创建excel文件对象
  XSSFWorkbook workbook = new XSSFWorkbook();
  
  //表格的数据,第一层为sheet的数量,第二层为每个sheet中的数据
  List<List<String>> data = new ArrayList();
  
  //cdl用以实现同步
  CountDownLatch cdl = new CountDownLatch(data.size())<
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值