向Excel文件输出数据时,随着数据量的增加,时间将呈现何种曲线增长呢?周末闲来无事,写了个小程序做了一次非正式的性能测试。测试结果如下—— ----------------------------------------------------- 输出方式 Rage for One Time Cell by Cell ----------------------------------------------------- 1000行×50列 4 秒 117 秒 5000行×50列 8 秒 492 秒 10000行×50列 17 秒 1,004 秒 20000行×50列 35 秒 2,035 秒 30000行×50列 67 秒 3,036 秒 40000行×50列 100 秒 3,954 秒 50000行×50列 182 秒 5,172 秒 60000行×50列 207 秒 6,733 秒 ----------------------------------------------------- ※一些说明: (1)程序使用Visual Basic 2008 Express Edition完成。 (2)由于我家里的电脑上没有安装Office 2003,只好将就着用Office 2007提供的Excel Object库(Microsoft Excel 12.0 Object Library)来做测试。 (3)测试使用我的笔记本 HP B1900 (CPU)Intel Core2 T5500 @1.66GHZ/1.67GHZ (内存) 1GB (4)针对两种Excel写入方式做了测试: · Cell by Cell方式:每个单元格逐一赋值,多次写入。 · Range for One Time方式:先以二维数组保存所有要写入Excel的数据,一次性写入。 (5)针对不同数据量做了测试: ·1000行×50列 ·5000行×50列 ·10000行×50列 ·20000行×50列 ·30000行×50列 ·40000行×50列 ·50000行×50列 ·60000行×50列 (6)Excel写入时采取每个单元格均写入10个半角字符,例如A3单元格的写入内容为“1-3ABCDEFG”。 ※结论 (1)从所需时间上来比较,Range for One Time方式优势非常大。当然,在运行这一组测试的时候内存占用也较Cell by Cell方式多一些,机器明显慢了许多。不过,在机器配置许可的情况,还是建议尽量使用Range for One Time方式。如果迫不得已要使用Cell by Cell方式,在数据量小于1000行的情况下应该还是可以忍受的。 (2)不论Cell by Cell方式还是Range for One Time方式,Excel写入所需时间和写入数据量基本呈正比。这说明微软的Excel Object库还是比较稳定、可信的。 (3)也试了一下ExcelCreator.NET的执行结果,感觉不如Excel;不过对于少量数据,使用ExcelCreator还是有优势的。 ※几篇放在Blogspot上的相关日志 http://liuchunhui.blogspot.com/2008/09/excel_07.html http://liuchunhui.blogspot.com/2008/09/excel.html http://liuchunhui.blogspot.com/2008/09/excel_3261.html
|