4 回答

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

TA贡献1891条经验 获得超3个赞
目前的程序的瓶颈是I/O交互。我需要读取多次本地模板,然后处理,之后导出1000份excel再打包。目前的处理方法是,将模板在程序里渲染,省去了一半的时间(读取模板的时间)。而多线程处理该程序是有问题的:原因如下:程序瓶颈是i/o,采用多线程会造成多次的磁盘寻址,会极大的降低效率。cpu处理指令的速度和磁盘寻址的速度大概是百万级。另外分享下,07版本的excel导出和03版本的excel效率差了3倍。
添加回答
举报