在网上看到分页的方式,据说DataReader分页速度最快。于是做了一番测试。
首先我是使用Access数据库的,使用SocanCode自动生成代码分页(SocanCode是生成not in语句进行分页的)和使用DataReader分页,测试时间的方法如下:
Stopwatch sw = new Stopwatch();
sw.Start(); //启动计时
//编写代码执行被测试的算法
sw.Stop();//停止计时
//获取算法执行时间
long UsedTime = sw.ElapsedMilliseconds;
//...
sw.Start(); //启动计时
//编写代码执行被测试的算法
sw.Stop();//停止计时
//获取算法执行时间
long UsedTime = sw.ElapsedMilliseconds;
//...
数据不多,一百多左右,测试结果如下,左边为DataReader分页,右边为sql分页:
第1页:44,44
第2页:44,69
第3页:42,73
第4页:43,68
第5页:46,74
第6页:44,82
第7页:48,76
第8页:44,81
第9页:45,87
第10页:43,80
第11页:46,85
从上面的数据来看DataReader分页时间比较均匀,而且没有出现越往后越慢的情况,而用SQL分页则有越往后速度越慢的趋势。于是把数据量增大到一万条,发现使用SQL分页已经慢得不行了,相差了几百倍左右了。再加大数据量,我已经没有耐心等待页面打开了。
再经过搜索,看到其它人的测试数据虽然说是DataReader最快,但也没有相差如此巨大,于是换SQLSERVER再测试,结果显示,虽然DataReader还是快一些,但差距已经非常小了,估计是数据库功能越强大,则执行SQL速度越快吧。
最终得出结论:DataReader速度的确是最快的,但是随着数据库功能的强大,差距在缩小,所以使用功能不强的Access差距巨大,而使用功能强大的SQLSERVER则差距非常小。下一步准备将SocanCode升级为DataReader方式分页。