WalterMills 2019-03-22 15:17 采纳率: 100%
浏览 638
已采纳

java导出1000个07版本的excel,时间过长该如何优化?

1.目前使用poi导出excel表格,之前用03版本可以导出2000条左右,现在换成07版本,只能导出900条左右。测试后发现导出07版本的excel花费的时间大概是03版本的3倍左右。

2.项目设置30s超时,从数据库查出来的1条数据对应一张excel,不用考虑多的sheet页,业务不允许。

3.目前是导出excel到临时文件夹,然后从临时文件夹中打包成zip包。

4.目前想法是从数据库中读取的数据转换成输出流然后存在缓存管理类中。但是输出流还要写到excel中。就是无论怎样都会进行磁盘交互。最后是要打成zip包的。这个过程如何实现呢?

  • 写回答

2条回答 默认 最新

  • qq_18727699 2019-03-26 17:37
    关注

    楼上说的多线程的方法你试过了吗?你确定你的程序已经出现了I/O瓶颈,你写出的单个excel数据都不小吗?如果多线程写出1000个不大的txt文件,应该是不会花多少时间的,raid5的磁盘写出速度好几百M/s还是有的吧,所以感觉是生成excel文件花了比较多的计算时间。当然我也不确定,只是感觉可以试一下多线程。
    如果你想使用不写出到磁盘,直接在内存中生成最后的.zip文件的话,你也可以试一试。据我了解poi生成excel文件,最后也是写出到文件输出流;你可以在这一步改为输出到ByteArrayOutputStream,先把这个excel文件的流存在字节数组中;然后对每一个excel文件的流,新建一个zip entry,加入到你最终写出zip文件中的流去里(zip entry好像可以直接读入流创建,你可以试一下);整个过程中,不用写出中间的excel文件,而只用写出最终包含了1000个excel文件的zip文件就可以了。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥15 关于#Mybatis#的问题:怎么办重复数据如下"KSDM":37,"KSMC":"呼吸内科门诊","ksdm":37,"ksmc":"呼吸内科门诊"xml文件填写
  • ¥40 servlet的web程序部署出错
  • ¥50 activiti 新建流程系列问题
  • ¥50 为什么我版本升级之后运行速度变慢5倍??
  • ¥15 如何在gazebo中加载机械臂和机械手
  • ¥15 纯运放实现隔离采样方案设计
  • ¥20 easyconnect无法连接后缀带.com的网站,一直显示找不到服务器ip地址,但是带有数字的网站又是可以连接上的,如何解决
  • ¥15 电脑开机过商标后就直接这样,求解各位
  • ¥15 mysql , 用自己创建的本地主机和用户名 登录不上
  • ¥15 关于#web项目#的问题,请各位专家解答!