NO.17 [excel]POI3.2、JXL2.4 解析Excel性能对比实验(含Excel读取、写入工具,JXL与POI实现均有)

    对于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

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值