对于Excel解析,之前对POI还算比较熟悉,最近才知还有个JXL工具,不免对两者的解析性能产生兴趣,上网搜了一篇文章,最后结论是POI较优,本着小马过河的精神,亲自一试(包括自写工具及参考文章中的代码),竟得出不同结论:
当数据量较大时(超过1万行),无论是时间消耗还是内存消耗,JXL均优于POI。
根据最终的测试结果,估计得出来不同的结论可能是采用的版本不同所致(还没研究JXL及POI的源码)。
具体情况请参见此文及相关下方我测试的Java源码及测试数据:
http://blog.csdn.net/haotangyu/archive/2009/12/03/4931670.aspx
我的测试环境:
jxl-2.4.2.jar
poi-3.1.jar
MyEclipse8.0 Run JVM设置:-Xms256m -Xmx512m
机器:4G、P7
分别准备了1千、1万、5万行的Excel,各为58列。(此测试代码稍加整理即可做为Excel导入工具类)
|
| 加载时间(ms) | 总耗时(ms) | 总消耗内存量(M) |
1千条:746K | POI | 572 | 609 | 8 |
| JXL | 296 | 422 | 12 |
| JXL-Close | 172 | 329 | -2 |
1万条:12.8M | POI | 4847 | 5066 | 91 |
| JXL | 634 | 2236 | 135 |
1万条:7.3M | POI | 1266 | 2019 | 73 |
| JXL | 488 | 1159 | 70 |
| JXL-Close | 343 | 1107 | 2 |
5万条:36.8M | POI | 7556 | 8633 | 208 |
| JXL | 2319 | 5581 | 96 |
| JXL-Close | 2543 | 6210 | -201 |
可以看出
1.加载速度及总耗时,POI3.2始终劣于JXL2.4
2.后续解析速度上(没列,是总耗时减去加载时间),POI3.2总体上优于JXL2.4
3.1万条数据以上时,消耗内存量方面,POI3.2劣于JXL2.4
两点说明:
1.这里面有个有趣的细节:那个1万条12.8M的文件是我根据那个5万条的Excel选中后4万行按Del生成的,后来发现那4万行并没有真正删除,还有,是空行而已。后选中后右键删除(试了几次后才成功),总算真正清除了,体积也缩小了很多,从实验看来,空白格不但对Excel体积有影响,对程序读取影响也很大。程序中POI方式读取中设计了对空白行的判断,但加载还是多花了时间;
2.标识为JXL的数据,为代码中未加入WorkBook.close()方法时试验(注意代码中注释掉的wb.close()一行);而JXL-Close则添加了close方法调用,可以看出时间消耗未明显增加,但内存消耗却大大降低(负的)。刚看了反编代码,果然,close方法中调用了System.gc()。
根据 haotangyu的代码进行的测试结果,还是上面那些文件,同样可以得出以上第1、2条结论:
|
| 加载时间(ms) | 总耗时(ms) |
1千条:746K | POI | 499 | 515 |
| JXL | 203 | 359 |
1万条:7.3M | POI | 1716 | 1731 |
| JXL | 390 | 1108 |
5万条:36.8M | POI | 7878 | 7925 |
| JXL | 2309 | 5711 |
转载请注明本文地址:http://blog.csdn.net/amosryan/archive/2010/03/24/5412340.aspx