2024年4月5日发(作者:)
NET DataList与ListView性能对比研究
【摘 要】本文首先概述了.net中datalist及其与其他数据控件
的区别,然后分析了选择datalist等数据控件应遵循的原则和应
考虑的因素,最后完成了datalist与listview进行了数据查询时
的实验,从而为开发人员基于性能选择使用datalist提供了参考。
【关键词】net datalist;数据源;listview
1 datalist概述
datalist控件最常用的功能是用自定义的格式显示数据库中的
数据,其数据的显示格式可以定义在创建的模板中。datalist可创
建的模板主要包括项模板、选中项模板、交替项模板、编辑项模板、
头模板、脚注模板和分隔符模板。在各个模板中可以放置控件如
button,从而将模板中需要处理的事件和操作传递到模板以外,而
且传递时允许进行项目的数据显示、数据选择和模式切换。项的外
观可以样式设置来实现[1],每个模板的样式对象的属性,都可以
在设计时或运行时进行设置。
在任何重复结构中显示数据时,都可以使用datalist控件。它
显示数据时还可以使用不同的布局显示数据行,比如可以按行对显
示的数据按要求排序,布局可以通过在模板放入控件来实现,但是
需要注意的是,它显示数据项时使用的也是html 表,虽然它也可
以对表中显示数据项的单元格的列数、方向、顺序等进行控制,但
它对表元素控制的精准度不如repeater控件。
要使用datalist控件呈现数据,就必须先跟数据源绑定,
datalist控件绑定的数据源要么是sqldatasource 或
objectdatasource,要么是sqldatareader 类、dataset 类或
oledbdatareader 类等实现 了ienumerable 接口的类。数据绑定
时,可以将datalist 整体绑定到数据源,也可以将datalist中放
置的子控件的属性绑定到数据项的相应字段。
datalist 的大部分事件是在点击模板中的button、imagebutton
或linkbutton等按钮时触发。datalist 通过按钮的 commandname
属性的值来区别它们,并引发相应的事件。但如果commandname 属
性的值不是edit、delete、update 或 cancel等,而是一个没有
预定义的自定义值,那么datalist 将引发 itemcommand 事件。如
果要对datalist 的功能进行自定义,那么可以考虑使用
itemdatabound 事件和itemcreated 事件。
与gridview等数据控件不同的是,datalist不能直接与数据源
控件交互以达到更新和分页的目的,因而datalist 的排序、分页
和编辑等功能,必须通过编写代码完成。通常的作法是创建
edititemtemplate模板,然后进行布局并放入控件,然后在项模板
中放入按钮,并将按钮的 commandname 属性设置为edit、delete、
update 或 cancel等,这样,当按钮被点击时,datalist的
editcommand 事件将被触发,然后在处理事件的代码中,对项使用
编辑模式,这样编辑项模板就可以显示了。
在用datalist显示数据时,可以灵活地进行多种应用,datalist
的数据源可以是数据库、可以是xml文件,也可以是其它数据列表,
比如,可以使用通过控件提供的模板,可以创建自定义列,可以响
应和处理事件,可以处理datalist中的项,也可以使用其中的
datakeys集合,通过配置 datalist可以编辑表中的数据记录。
2 datalist与主要数据控件的区别
2.1 datalist和repeater的区别
2.1.1 对列表中html元素的控制程度不同。在.net中,datalist
是通过表格和不同的布局显示项目的数据,虽然它也是通过模板显
示数据,但与repeater 控件不同的是,datalist是将需要显示的
数据项显式放在 html表中;或者说它是用html 表元素在列表中
显示数据项。但是如果想要精确地控制列表的 html元素,应该优
先用 repeater而不是datalist。
2.1.2 功能和效率不同。repeater比datalist更容易设置样式,
运行时不用产生.net指定的一系列垃圾代码,因而也失去了.net
的一些功能。但是repeater编译后能生成更简单更高效的html。
2.1.3 模板和样式不同。repeater没有提供
selectitemtemplate、itemstyle等模板和样式,而datalist拥有
webcontrol样式属性。
2.1.4 灵活性不同。repeater由于只是重复显示模板中的数据因
而比datalist更灵活。
2.1.5 派生类不同。repeater是从control派生出来的,而
datalist和gridview都是从webcontrol派生出来的。
2.2 datalist和gridview的区别
2.2.1 功能不同。gridview比datalist功能更强大,gridview
有数据更新、分页显示、数据删除等功能,而datalist不能直接
对数据源进行更新、分页及排序等操作。
2.2.2 效率和性能不同。gridview由于封装的功能比datalist
更强大,因而运行时需要的资源更多,效率和性能上比datalist
要差,特别是gridview在分页显示数据时是把全部数据一次取出,
然后在gridview内部实现数据分页显示,这种设计在执行大批量
数据时,效率和性能比datalist都要差很多。
2.2.3 灵活性不同。gridview由于模板是已经封装好的,控制模
板有一定难度,但控制模板时datalist要方便的多,因而datalist
的模板使得它有着比gridview更大的灵活性。
2.3 datalist和listview的区别
datalist和listview显示数据时都可以使用模板和样式。
listview无需用户编写代码就能实现对数据项的插入、更新、删除
数据、排序和分页等操作[2]。
listview几乎就是gridview和 repeater的有机结合,它既有
gridview的数据编辑功能,同时又有repeater模板功能,因而它
提供了比gridview更多的布局,同时又具有gridview的一些特性。
3 选择datalist等主要数据控件应遵循的一般原则和应考虑的
主要因素
3.1 选择datalist等主要数据控件的一般原则
由于datalist等主要数据控件都可以显示数据,同时又有一些
细微的区别,在选择使用这些数据控件时,要根据开发的实际需要
做出合理的选择,如果只是简单地显示数据,那么应该本着性能优
先的原则首选repeater控件,如果显示数据时还需要处理样式和
外观,就应该使用datalist,如果显示数据时需要处理分页排序等
功能,就应该使用gridview,如果显示数据时既需要处理样式和外
观,也需要处理分页排序等,就应该使用listview控件。当然,
分页排序等功能如果要手工编码实现,就可以根据实际需要选择控
件。
3.2 选择datalist等主要数据控件时应该考虑的因素
从继承的层次和控件大小方面看,repeater在主要数据控件中是
最轻最小的,它只继承了控件的一些基本功能,比如id属性、子
控件集合等。但是,datalist、gridview则继承了webcontrol的
功能,其中包括样式和外观等属性。
从控制控件和效率的的方面看,repeater支持模板,而且在主要
数据控件中是最简单的数据绑定控件,它既没有特定的用户界面,
也没有提供外观和内建的样式,如果需要对界面进行深度控制,那
么用repeater几乎是最佳选择。当然,如果对界面没有太高的要
求,其他数据控件封装的功能会有很大 的方便。但repeater的代
码效率更高。
从功能方面看,凡是repeater有的功能,datalist都有,而且
datalist继承自 webcontrol,因而具有外观和样式属性,同时,
datalist也支持对项的编辑、删除、选择等标准操作,当需要显示
一系列纵向或横向的数据项时,采用datalist其实是不错的选择。
listview其实是gridview和 repeater功能的结合。
gridview和datalist共同具有的功能包括:支持外观和样式属
性、对数据项的编辑、删除、选择,不同的是,gridview能支持
datalist所不支持的分页、排序和对表格的外观控制,但gridview
却不支持datalist具有的样式布局和流式布局,此外,gridview
只能通过对某个列使用templatecolumn,实现对该列使用模板,由
于gridview不支持模板属性,因而不能数据项或者表格的行使用
模板。
4 datalist与listview在数据查询时的性能对比试验及分析
4.1 实验方案
为了对datalist与listview的数据查询和插入的性能进行研
究,需要设计和完成一个试验,实验主要方案设计如下:
首先,在同一台服务器上同时安装windows2003服务器版操作系
统、安装和配置.net4.5版程序运行环境、安装sql server2008企
业版数据库,这样实验使用的应用程序就可以在同一台机器完成与
本机数据库系统的数据交换,这样做的好处在于可以避免计算机的
软件硬件环境、网络状况等外部条件对实验结论的影响。
其次,设计实验使用的数据库,并在sql server2008企业版数
据库中创建数据库,为了避免数据库中不同数据类型和数据的存放
顺序对实验结果的影响,数据库系统中针对几种不同数据类型的升
序数据和降序数据分别建立不同的表对象,并在其中创建存储过
程,以处理数据的插入和查询操作。
第三,对数据库中的对象进行初始化,并进行检查。
第四,在vs2010中分别完成用datalist与listview对数据库
中不同的表对象进行数据插入和数据查询的相关程序源代码,并完
成程序的相关测试。
第五,实验开始后,主要操作步骤是做启动操作系统后将数据库
服务器运行需要的服务启动后,再启动实验需要的数据库系统,最
后启动实验使用的.net应用程序,实验结果需要的数据主要是运
行.net应用程序后,分别记录datalist与listview对数据库中不
同的表对象进行数据查询的所需要的时间。
第六,对实验中得到的数据进行理论分析和误差分析,并得出
datalist与listview这两个控件在数据查询时的优劣性,通过理
论分析得出两者的性能差距,这样为企业级应用的研发人员在基于
性能选择使用datalist与listview控件时,提供重要的参考依据。
4.2 实验结果
从实验结果来看,实验数据的类型和存放顺序对实验结果没有产
生什么影响,所以这里只列出了降序数据的实验结果。实验结果如
下表所示(时间单位为秒)。
4.3 实验结论
从实验结果看,在应用程序服务器和数据库服务器合二为一时,
在一次提交的数据在20万条左右时,datalist与listview数据查
询的时间几乎是相同的,所以此时选择datalist与listview都可
以,因为datalist的性能优势并不明显,但当一次提交的数据在
25万条时,datalist的性能优势才逐步体现出来。但当一次提交
的数据在45万条时,datalist与listview数据查询的时间都出现
了大幅增长,这主要原因是一次提交的数据超出了服务器的工作负
荷。尽管上述数据难以避免的存在误差,但不会影响实验结论的准
确性。
4.4 数据分析
从实验数据看,当一次提交的数据在20万条左右时,datalist
的性能优势并不明显,而且上述数据排除了网络传输对查询时间的
影响,但当一次提交的数据超过25万条时,datalist的性能优势
开始体现出来,这对于性能要求较高的应用程序,这种优势的意义
重大。
综上所述,虽然datalist与listview控件都可以进行数据显示,
但是在基于性能选择使用它们时,应该根据需要插入的数据量大小
和具体的需要的功能等因素进行选择,当需要处理的数据条数在20
万条左右时,datalist与listview控件的显示时间相差不大,使
用哪个都可以,此时如果还需要分页排序等功能而且又不想手工实
现分页排序功能,就应该使用listview控件,如果不需要分页排
序等功能或者手工实现这些功能,那就可以使用datalist控件,
但当数据条数超过25万条时,应该选择使用datalist,因为此时
它的性能优势开始慢慢体现出来,此时即使是需要分页排序等功
能,也应该手工实现,因为提交的数据量越大优势越明显。
【参考文献】
[1]datalist web 服务器控件概述[ol].http:
///zh-cn/library/ .
[2]listview web 服务器控件概述[ol].http:
///zh-cn/library/.
[责任编辑:曹明明]


发布评论