• 软件测试技术
  • 软件测试博客
  • 软件测试视频
  • 开源软件测试技术
  • 软件测试论坛
  • 软件测试沙龙
  • 软件测试资料下载
  • 软件测试杂志
  • 软件测试人才招聘
    暂时没有公告

字号: | 推荐给好友 上一篇 | 下一篇

数据源的选择:DataSet 与DataReader及泛类型集合的性能测试

发布: 2009-3-18 10:19 | 作者: 不详 | 来源: 测试时代采编 | 查看: 241次 | 进入软件测试论坛讨论

领测软件测试网 很早就想测试一下DataSet, DataReader的性能差别了
  到了.Net 2.0时代,又多了一个泛类型集合绑定,于是我做了以下实验


  前言:
        测试代码未必标准,但是起码可以说明一些问题
        主要使用重复绑定数据集10000次(全部在服务端进行),绑定全部使用GridView的绑定列
  
   测试条件:

  控件:GridView
   字段:ID, NAME
   数目  15条
   循环次数 10000
   测试次数 3次    软件:VS2005,SQLServer2005,WindowXP
   测试结果:
    DataSet: 9.6, 8.9, 8.75 = 9.08秒
        DataReader:6.5, 6.25,5.8 = 6.18秒泛类型集合: 7, 7.1,6.8 = 6.97秒总结     如果以DataSet的速度为标准,那么DataReader的速度提高了47%,泛类型数据集速度提高了30%,差距是随着记录集数量还有字段数量递增的。

        从结果来看,虽然3次的时间不够准确,但是足够描述大概情况了,DataSet这种东西个人认为,除非有必要比如需要非连接更新,排序等等。一般没必要使用.DataReader局限性太大而且灵活性不够,个人认为绑定一些简单控件比如DropDownList或ListBox差不多。当然它的主要用途还是用于后台读取数据并进行操作。            

        泛类型数据集,这个我是看了PetShop4.0后才学的。感觉配合DataReader以及业务原型(Model)一起使用足以替换DataSet。而且实际扩展和灵活性在某些方面甚至超过DataSet。
        我们使用DataReader的时候最怕数据库位置变了(虽然不大可能),当然DataReader也可以根据列名获取值,但是效率太低了,而且虽然解决了位置问题,但是无法解决字段名更改(这个比改位置的几率还大) 我的解决方案是,在SQL语句中先排好字段的顺序,比如SELECT ID,NAME,TIEM FROM TABLE这样就解决了字段乱序的问题,如果服务器字段名更变了只需要修改SQL语句就好了。
        那么表现层呢?表现层因为使用的是业务原型与泛类型集合,所以实现了与数据库字段的弱依赖,你只需要指定好原型的属性进行绑定就好了,操作方式和绑定DataSet的做法大概一致。
        这样一来,除了添加了新字段,所有的改变都可以只通过修改SQL语句就可以全部更新。非常方便,而且效率更高。有人会问,使用DataSet同样可以实现弱依赖,只需使用列名编号 DataTable.Rows[0][0]就可以了。的确,这样同样可以,但是会不会发现,比起Model.ID ,DataTable.Rows[0[0]已经丧失了可读性。所以对于现在的开发,除非有特殊需要,不然已经不需要使用DataSet作为数据源了。



延伸阅读

文章来源于领测软件测试网 https://www.ltesting.net/

TAG: dataset 类型 数据源 性能测试 DataReader DataSet


关于领测软件测试网 | 领测软件测试网合作伙伴 | 广告服务 | 投稿指南 | 联系我们 | 网站地图 | 友情链接
版权所有(C) 2003-2010 TestAge(领测软件测试网)|领测国际科技(北京)有限公司|软件测试工程师培训网 All Rights Reserved
北京市海淀区中关村南大街9号北京理工科技大厦1402室 京ICP备2023014753号-2
技术支持和业务联系:info@testage.com.cn 电话:010-51297073

软件测试 | 领测国际ISTQBISTQB官网TMMiTMMi认证国际软件测试工程师认证领测软件测试网