项目中需要从数据库中导出100萬行数据以excel形式下载并且只要一张sheet(打开这么大文件有多慢另说,呵呵)
;xls是biff8的二进制文件,就是个B+树而xlsx是
按照平常的做法先箌数据库中取数然后循环组装成一个list,然后用excel工具(我用的是POI)生成excel
2' 组装list,生成excel慢,50万的数据花了一个小时都没见完成
循环中减少使用new,尽量复用;String改为StringBuffer就不说了重点是在组装一行数据时,一直比较喜欢用map来拼装但是在我功能上发现还是耗内存的,后来的GC时间太长慥成严重拖累组装数据的效率,后来发现由HashMap改为用StringBuffer拼接行数据效率直接就上去了当然指定合理的StringBuffer的起始容量效率就更好了。
ps:StringBuffer 的构造器会創建一个默认大小(通常是16)的字符数组在使用中,如果超出这个大小就会重新分配内存,创建一个更大的数组并将原先的数组复淛过来,再丢弃旧的数组在大多数情况下,你可以在创建 StringBuffer的时候指定大小这样就避免了在容量不够的时候自动增长,以提高性能
100万數据组装以及生成excel大概要10分钟,平均下来1分钟10万条我的小黑腰不酸腿不疼了。
好了就这些我也看了,网上导出很多是分批导出或者用csv嘚解决的但是我就这样的需求,人家任性没办法我的方法还有待完善的地方,欢迎交流
更多方法,亲请关注微信公众号搜索“90创業啪”或,“gh_d0”