NET网页编程之DataSet和SqlDataReader功能对照与测试
前几天同学问我学习方向的问题。有点想法,不知道对不对,怕误导同学,现在“开源一下”。注:括号内是我现在整理的时填加上的。DataSet和SqlDataReader的对照的文章和帖子网上已良多,我也看了良多先辈的漫笔.本人在口试和实践事情中也碰到如许的成绩.可是一直是没深切举行进修.比来在事情余暇之余,专程查阅了一些文章,也包含msdn的官方文档.本人创建数据库和测试程序,对DataSet和SqlDataReader做了对照.起首关于二者对照支流的概念就是:
1.DataReader利用时一直占用SqlConnection,在线操纵数据库.DataSet则是将数据一次性加载在内存中.撑持数据库会见的断开毗连模子.
2.DataReader每次只在内存中加载一条数据,勤俭内存.DataSet将数据全体加载在内存中.对照损耗内存.
3.DataReader单向只读.DataSet撑持查询修正删除等操纵,对照天真.
4.DataReader与SqlCommand搭配.DataSet与DataAdapter分离利用.
为何会如许呢?我们就来剖析一下详细的缘故原由.检察一下msdn关于二者的分歧形貌:
1、SqlDataReader:
该类供应一种从SQLServer数据库读取行的只进流的体例。没法承继此类。定名空间:System.Data.SqlClient程序集:System.Data(在System.Data.dll中).可使用ADO.NETDataReader从数据库中检索只读、只进的数据流。查询了局在查询实行时前往,在并存储在客户真个收集缓冲区中,直到您利用DataReader的Read办法对它们收回哀求。利用DataReader能够进步使用程序的功能,缘故原由是它只需数据可用就当即检索数据,而且(默许情形下)一次只在内存中存储一行,削减了体系开支。
2、DataSet:
该工具是撑持ADO.NET的断开式、散布式数据计划的中心工具。DataSet是数据的内存驻留暗示情势,不管数据源是甚么,它城市供应分歧的干系编程模子。它能够用于多种分歧的数据源,用于XML数据,或用于办理使用程序当地的数据。DataSet暗示包含相干表、束缚和表间干系在内的全部数据集。下图将显现DataSet工具模子。
从下面的形貌能够看出,DataReader和DataSet具有分歧的布局模子.在数据的体例处置上也存在明显的不同.SqlDataReader会制止创立不用要的工具或复制不用要的数据.DataSet能够暗示完全的数据模子,包含表格、束缚前提和表干系.在工具的创立和烧毁等环节必要损耗更多的资本,因而在功能上也稍显减色.因而良多文章得出的结论也是在只举行读数据操纵的情形下,DataReader的功能要强于DataSet.可是良多文章都没有响应的测试,就自觉下结论.
可是猎奇心思的使令使我很想来做个实验来考证一下这个结论,究竟DataReader比DataSet在查询数据的时分,功能会不会胜出,假如前者更优的话那末会超越几?我本人写了个小程序,本人创建的数据库举行了实行.实行测试情况以下:
硬件:
CPU
IntelT23001.66GHz内存
KingstonDDR26671G硬盘
80G5400转8m
软件:
操纵体系
WindowsServer2003数据库体系
SQLServer2005Enterprise数据范围
1000000条数据
数据库表布局
Test
称号
范例备注
idint标记会萃索引name
nvarchar(50)
非会萃索引birthday
datetime
诞辰height
int
身高sex
int
性别address
nvarchar(100)
地点lastlogintime
datetime
非会萃索引
详细的实行程序c#代码以下,利用了usingSystem.Data.SqlClient;usingSystem.Diagnostics;两个namespace下的类,Stopwatch工具用来举行计时.
测试DataSet的代码:
using(SqlConnectionconn=newSqlConnection("DataSource=127.0.0.1;InitialCatalog=Test;IntegratedSecurity=True"))
{
Stopwatchst=newStopwatch();
st.Start();
conn.Open();
SqlDataAdapterda=newSqlDataAdapter(sQuery,conn);
st.Stop();
st.Start();
DataSetds=newDataSet("test");
da.Fill(ds);
st.Stop();
longltimes=st.ElapsedMilliseconds;
conn.Close();
}
测试DataReader的代码:
using(SqlConnectionconn=newSqlConnection("DataSource=127.0.0.1;InitialCatalog=Test;IntegratedSecurity=True"))
{
Stopwatchst=newStopwatch();
st.Start();
conn.Open();
SqlCommandComm=newSqlCommand(sQuery,conn);
st.Stop();
textBox4.Text=st.ElapsedMilliseconds.ToString();
st.Start();
SqlDataReaderreader=Comm.ExecuteReader();
while(reader.Read())
{
}
st.Stop();
longltimes=st.ElapsedMilliseconds;
textBox2.Text=ltimes.ToString();
conn.Close();
}
测试语句和工夫ms分离以下:
语句
DataSet费时
DataReader费时
stringsQuery="SELECT*FROMdbo.testwhereid<=1"
0ms0msstringsQuery="SELECT*FROMdbo.testwhereid<=10"
1ms1msstringsQuery="SELECT*FROMdbo.testwhereid<=100"
2ms3msstringsQuery="SELECT*FROMdbo.testwhereid<=1000"
5ms6msstringsQuery="SELECT*FROMdbo.testwhereid<=10000"
8ms50ms从实验了局剖析能够得出以下结论:
1.在查询数据量很少的情形下100条内,DataReader和DataSet几近没有甚么分明的功能不同.
2.数据量过年夜,靠近10000条的时分的数据查询,DataReader的功能要分明优于DataSet.
关于二者的功能对照,不该该容易下结论,除参考实行设备,也要思索实践的数据范围.
详细项目使用中,选择合适详细需求的工具举行数据处置,才干无效的进步体系的功能.
本文的测试情况和了局大概存在偏向,可是但愿能给人人带来一些匡助,一同交换进修.感谢.
我感觉可以顶到50楼,出乎意料的是大家居然纷纷写出自己的博文,还被编辑做成了专题,置于首页头条。 Servlet的形式和前面讲的CGI差不多,它是HTML代码和后台程序分开的。它们的启动原理也差不多,都是服务器接到客户端的请求后,进行应答。不同的是,CGI对每个客户请求都打开一个进程(Process)。 Asp.net:首先来说,Asp.net和Asp没什么关系,看着像是升级版本什么的,其实没什么联系。Asp是脚本编程,用的是ASP语言,而ASP.net用的是C#语言,完全不同的东西。 ASP是把代码交给VBScript解释器或Jscript解释器来解释,当然速度没有编译过的程序快了。 ASP.net的服务器,要求安装一个.net环境,当然我这里指的是windows系统,顺便点一下,.net只能放在windows环境里来运行。Asp.net1.1的就装Framework1.1,Asp.net2.0的就装Framework2.0。 主流网站开发语言之ASP:ASP是微软(Microsoft)所开发的一种后台脚本语言,它的语法和VisualBASIC类似,可以像SSI(ServerSideInclude)那样把后台脚本代码内嵌到HTML页面中。虽然ASP简单易用,但是它自身存在着许多缺陷,最重要的就是安全性问题。 ASP.Net和ASP的最大区别在于编程思维的转换,而不仅仅在于功能的增强。ASP使用VBS/JS这样的脚本语言混合html来编程,而那些脚本语言属于弱类型、面向结构的编程语言,而非面向对象。 这也就是最近几年来随着各种新的后台技术的诞生,CGI应用在Internet上越来越少的原因。CGI方式不适合大访问量的应用。 现在的ASP.net分为两个版本:1.1和2.0Asp.net1.1用VS2003(visualstudio2003)编程。Asp.net2.0用VS2005(visualstudio2005)编程。现在一般开发用的是VS2003。
页:
[1]