关于SqlDataReader与SqlDataAdapter的一点点不同的解读
来源:互联网 发布:淘宝怎么修改地址手机 编辑:程序博客网 时间:2024/06/05 05:46
关于SqlDataReader与SqlDataAdapter的比较,网上有很多。看的多了不难发现,都是人云亦云,且其中也不乏谬误之处。
给我感受最深的莫过于二者性能的描述:SqlDataReader是“只读访问 适合数据量较小",SqlDataAdapter"适于数据量较大时,要求资源也大一点"。甚至有赤裸裸的说“Reader要比Adapter速度快”,但事实到底如何呢(或许测试代码不专业,但是这个结果的确与我们从网上看到的描述反差很大.其实你去翻一翻MSDN,根本就没有只言片语关于这方面的描述,只能感叹人们的想象能力太丰富了).
测试的数据量(用的本机数据库)
测试代码如下
static void Main(string[] args) { var tempConnectionStr = "Data Source=.;Integrated Security=SSPI;Initial Catalog=xxxx;"; var tempCmdStr = "Select * from xxxx WHERE yyyy=0;"; var tempMax = 10; SqlConnection tempCon = new SqlConnection(tempConnectionStr); SqlCommand tempCmd = tempCon.CreateCommand(); tempCmd.CommandText = tempCmdStr; switch (Console.ReadKey().KeyChar) { case '1': Console.WriteLine(); for (int i = 0; i < tempMax; i++) { TestReader(10, tempCon, tempCmd); } break; case '2': Console.WriteLine(); for (int i = 0; i < tempMax; i++) { TestAdapter(10, tempCon, tempCmd); } break; } } static void TestReader(int iMax, SqlConnection iCon, SqlCommand iCmd) { var tempSecond = 0L; Stopwatch tempWatcher = new Stopwatch(); iCon.Open(); tempWatcher.Restart(); for (int i = 0; i < iMax; i++) { DataTable tempDt1 = new DataTable(); var tempReader = iCmd.ExecuteReader(); tempDt1.Load(tempReader); } tempWatcher.Stop(); tempSecond += tempWatcher.ElapsedMilliseconds; iCon.Close(); Console.WriteLine("Total cost={0}, Avg cost={1}.", tempSecond, tempSecond / iMax); } static void TestAdapter(int iMax, SqlConnection iCon, SqlCommand iCmd) { var tempSecond = 0L; Stopwatch tempWatcher = new Stopwatch(); iCon.Open(); tempWatcher.Restart(); for (int i = 0; i < iMax; i++) { DataTable tempDt1 = new DataTable(); SqlDataAdapter tempDa = new SqlDataAdapter(iCmd); tempDa.Fill(tempDt1); } tempWatcher.Stop(); tempSecond += tempWatcher.ElapsedMilliseconds; iCon.Close(); Console.WriteLine("Total cost={0}, Avg cost={1}.", tempSecond, tempSecond / iMax); }
测试结果如下
使用SqlDataReader
使用SqlDataAdapter
如果把查询语句改为Select top 200 *,结果如下
使用SqlDataReader
使用SqlDataAdapter
- 关于SqlDataReader与SqlDataAdapter的一点点不同的解读
- SqlDataReader 与SqlDataAdapter+DataSet 的区别
- SqlDataReader,SqlDataAdapter与SqlCommand的一点总结.
- sqldataReader,sqldataAdapter,DataSet的使用
- 使用SqlDataReader和SqlDataAdapter的注意
- sqldatareader 和 sqldataadapter 、dateset的比较
- sqldatareader 和 sqldataadapter 、dateset的比较
- SqlDataReader 和 SqlDataAdapter 、DateSet的比较
- C# SqlDataAdapter和SqlDataReader的区别
- 关于setTImeout和setInterval的一点点解读
- SqlDataReader与SqlDataAdapter读取数据库
- 数据读取器对象SqlDataReader与数据适配器对象SqlDataAdapter的使用
- 数据读取器对象SqlDataReader与数据适配器对象SqlDataAdapter的使用
- sql 查询语法汇总(三)SqlDataReader 与SqlDataAdapter+DataSet 的区别
- 关于js和java的一点点不同
- c# 中 sqldatareader 和 sqldataadapter 、dateset的比较
- sqlconnection,sqlcommand,sqldataadapter,sqldatareader,dataset的关系详解
- 关于sqlDataReader的问题
- Graphite实战
- JavaScript程序开发(十三)—RegExp类型
- kill相同的进程、awk基础知识
- android 字符串特殊字符转义
- SHGetSpecialFolderPath
- 关于SqlDataReader与SqlDataAdapter的一点点不同的解读
- IOS开发 解决UIButton点击事件不识别
- 动态代理CGLIB
- 在eclipse中,关于打开文件与package explore目录的关联的
- 批处理学习
- java web中常用的一些配置文件的信息
- Membership 数据表结构详细解释(转:http://blog.csdn.net/hnfeitianwugui/article/details/6932135)
- test
- BZOJ 3110([Zjoi2013]K大数查询-区间第k大[段修改,在线]-树状数组套函数式线段树)