日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

究竟哪种取数据的方式最快?

發布時間:2025/3/15 编程问答 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 究竟哪种取数据的方式最快? 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

對于DataSet,DataReader,sql語句取數據,存儲過程取數據這些常見的方式,它們之間的效率問題,網上的評論非常多,而且又不是十分地統一,為了證明它們到底"有多快",我進行了如下測試:

測試一:

主題:DataSet?? VS? DataReader?

數據量:10萬數據的測試表

連接方式:本機

先進行數據表DataTable的裝載測試:

?

DataTable+sql語句裝載 ?1?????????????SqlConnection?conn?=?new?SqlConnection("server=.;database=Test;uid=Test;pwd=test;");
?2?????????????DataTable?resultDt?=?new?DataTable();
?3?????????????resultDt.Columns.Add(new?DataColumn("Id",?typeof(int)));
?4?????????????resultDt.Columns.Add(new?DataColumn("TestData1",typeof(string)));
?5?????????????resultDt.Columns.Add(new?DataColumn("TestData2",?typeof(string)));????????????
?6?????????????string?queryStr?=?"select?*?from?TestTable";//構建數據表,連接對象及查詢語句
?7?????????????Stopwatch?watch1?=?new?Stopwatch();//方式一:DataSet方式裝載
?8?????????????watch1.Start();
?9?????????????SqlDataAdapter?sda?=?new?SqlDataAdapter(queryStr,?conn);
10?????????????DataSet?ds?=?new?DataSet();
11?????????????sda.Fill(ds);
12?????????????resultDt?=?ds.Tables[0];
13?????????????watch1.Stop();
14?
15?
16?????????????Stopwatch?watch2?=?new?Stopwatch();//方式二:DataReader方式裝載
17?????????????watch2.Start();
18?????????????SqlCommand?cmd?=?new?SqlCommand(queryStr,?conn);
19?????????????conn.Open();
20?????????????SqlDataReader?sdr?=?cmd.ExecuteReader();
21?????????????while?(sdr.Read())?{
22?????????????????DataRow?dr?=?resultDt.NewRow();
23?????????????????dr["Id"]?=?sdr["id"];
24?????????????????dr["TestData1"]?=?sdr["TestData1"];
25?????????????????dr["TestData2"]?=?sdr["TestData2"];
26?????????????????resultDt.Rows.Add(dr);
27?????????????}
28?????????????sdr.Close();
29?????????????conn.Close();
30?????????????watch2.Stop();
31?
32?????????????Console.WriteLine("DataSet??? method,Reflection:?"?+?watch1.Elapsed);
33?????????????Console.WriteLine("DataReader method,Reflection:?"?+?watch2.Elapsed);
34?????????????Console.ReadLine();

?測試結果:

DataSet??? method,Reflection: 00:00:01.0080464
DataReader method,Reflection: 00:00:01.1056812?

然后,我們把這個語句放進存儲過程,再測試速度:

?存儲過程中語句也就是剛剛的查詢語句:

?

DataTable+存儲過程裝載 ?1?????????????SqlConnection?conn?=?new?SqlConnection("server=.;database=Test;uid=Test;pwd=test;");
?2?????????????DataTable?resultDt?=?new?DataTable();
?3?????????????resultDt.Columns.Add(new?DataColumn("Id",?typeof(int)));
?4?????????????resultDt.Columns.Add(new?DataColumn("TestData1",?typeof(string)));
?5?????????????resultDt.Columns.Add(new?DataColumn("TestData2",?typeof(string)));
?6?
?7?
?8?
?9?????????????SqlCommand?cmd?=?new?SqlCommand();
10?????????????cmd.CommandType?=?CommandType.StoredProcedure;
11?????????????cmd.CommandText?=?"GetTestData";
12?????????????cmd.Connection?=?conn;
13?
14?????????????Stopwatch?watch1?=?new?Stopwatch();
15?????????????watch1.Start();????????????
16?????????????SqlDataAdapter?sda?=?new?SqlDataAdapter(cmd);
17?????????????DataSet?ds?=?new?DataSet();
18?????????????sda.Fill(ds);
19?????????????resultDt?=?ds.Tables[0];
20?????????????watch1.Stop();
21?
22?
23?????????????Stopwatch?watch2?=?new?Stopwatch();
24?????????????watch2.Start();????????????
25?????????????conn.Open();
26?????????????SqlDataReader?sdr?=?cmd.ExecuteReader();
27?????????????while?(sdr.Read())
28?????????????{
29?????????????????DataRow?dr?=?resultDt.NewRow();
30?????????????????dr["Id"]?=?sdr["id"];
31?????????????????dr["TestData1"]?=?sdr["TestData1"];
32?????????????????dr["TestData2"]?=?sdr["TestData2"];
33?????????????????resultDt.Rows.Add(dr);
34?????????????}
35?????????????sdr.Close();
36?????????????conn.Close();
37?????????????watch2.Stop();
38?
39?????????????Console.WriteLine("DataSet????method,Reflection:?"?+?watch1.Elapsed);
40?????????????Console.WriteLine("DataReader?method,Reflection:?"?+?watch2.Elapsed);
41?????????????Console.ReadLine();

?運行結果為:

DataSet??? method,Reflection: 00:00:01.0025863
DataReader method,Reflection: 00:00:01.1531541

小結:不管是SQL語句方式,還是存儲過程方式,把數據裝進DataTable,DataSet方式都比DataReader要快一點點.要是不裝載到DataTable呢,情況會不會有所改變呢?

帶著這個問題,我有了如下測試:

?

DataReader不裝進DataTable ?1?????????????SqlConnection?conn?=?new?SqlConnection("server=.;database=Test;uid=Test;pwd=test;");
?2?????????????DataTable?resultDt?=?new?DataTable();
?3?????????????resultDt.Columns.Add(new?DataColumn("Id",?typeof(int)));
?4?????????????resultDt.Columns.Add(new?DataColumn("TestData1",?typeof(string)));
?5?????????????resultDt.Columns.Add(new?DataColumn("TestData2",?typeof(string)));
?6?????????????string?queryStr?=?"select?*?from?TestTable";
?7?????????????Stopwatch?watch1?=?new?Stopwatch();
?8?????????????watch1.Start();
?9?????????????SqlDataAdapter?sda?=?new?SqlDataAdapter(queryStr,?conn);
10?????????????DataSet?ds?=?new?DataSet();
11?????????????sda.Fill(ds);
12?????????????resultDt?=?ds.Tables[0];
13?????????????watch1.Stop();
14?
15?
16?????????????Stopwatch?watch2?=?new?Stopwatch();
17?????????????watch2.Start();
18?????????????SqlCommand?cmd?=?new?SqlCommand(queryStr,?conn);
19?????????????conn.Open();
20?????????????SqlDataReader?sdr?=?cmd.ExecuteReader();
21?????????????int?i?=?0;
22?????????????while?(sdr.Read())
23?????????????{
24?????????????????i++;
25?????????????}
26?????????????sdr.Close();
27?????????????conn.Close();
28?????????????watch2.Stop();
29?
30?????????????Console.WriteLine("DataSet????method,Reflection:?"?+?watch1.Elapsed);
31?????????????Console.WriteLine("DataReader?method,Reflection:?"?+?watch2.Elapsed);
32?????????????Console.ReadLine();
33?

?運行結果:

DataSet??? method,Reflection: 00:00:00.9876266
DataReader method,Reflection: 00:00:00.1093267

情況有了改變.但現實中,DataReader不裝載到任何對象中的情況還是非常少的.例如,我們經常把這些數據裝到List<>對象中,效率究竟怎么樣?

?

List<>裝載 ?1?????????????SqlConnection?conn?=?new?SqlConnection("server=.;database=Test;uid=Test;pwd=test;");
?2?????????????List<TestData>?resultDt?=?new?List<TestData>();????????????
?3?????????????TestData?td?=?null;
?4?????????????string?queryStr?=?"select?*?from?TestTable";
?5?????????????Stopwatch?watch1?=?new?Stopwatch();
?6?????????????watch1.Start();
?7?????????????SqlDataAdapter?sda?=?new?SqlDataAdapter(queryStr,?conn);
?8?????????????DataSet?ds?=?new?DataSet();
?9?????????????sda.Fill(ds);????????????
10?????????????foreach?(DataRow?dr?in?ds.Tables[0].Rows)?{
11?????????????????td?=?new?TestData();
12?????????????????td.Id?=?Convert.ToInt32(dr["Id"]);
13?????????????????td.TestData1?=?dr["TestData1"].ToString();
14?????????????????td.TestData2?=?dr["TestData2"].ToString();
15?????????????????resultDt.Add(td);
16?????????????}
17?????????????watch1.Stop();
18?
19?
20?????????????Stopwatch?watch2?=?new?Stopwatch();
21?????????????watch2.Start();
22?????????????SqlCommand?cmd?=?new?SqlCommand(queryStr,?conn);
23?????????????conn.Open();
24?????????????SqlDataReader?sdr?=?cmd.ExecuteReader();????????????
25?????????????while?(sdr.Read())
26?????????????{
27?????????????????td?=?new?TestData();
28?????????????????td.Id?=?Convert.ToInt32(sdr["Id"]);
29?????????????????td.TestData1?=?sdr["TestData1"].ToString();
30?????????????????td.TestData2?=?sdr["TestData2"].ToString();
31?????????????????resultDt.Add(td);
32?????????????}
33?????????????sdr.Close();
34?????????????conn.Close();
35?????????????watch2.Stop();
36?
37?????????????Console.WriteLine("DataSet????method,Reflection:?"?+?watch1.Elapsed);
38?????????????Console.WriteLine("DataReader?method,Reflection:?"?+?watch2.Elapsed);
39?????????????Console.ReadLine();

?

?運行結果:

DataSet??? method,Reflection: 00:00:01.1134010
DataReader method,Reflection: 00:00:00.4901601

小結:

DataSet中包含了DataTable的集合,所以,在SqlDataAdapter.Fill(ds)的過程中,其實已經進行了一次數據裝載,再裝載到其它對象,等于是進行了2次裝載.故爾速度稍慢.

要將數據裝到DataTable時,DataReader比DataSet要慢,而裝載到List<>對象時,DataReader要比DataTable快至少一倍.

?

我目前用的是2005的測試環境,下次我會到2008環境下測試延遲加載,看看情況會有什么不同.?

?

?

轉載于:https://www.cnblogs.com/CoreCaiNiao/archive/2009/12/24/1631514.html

總結

以上是生活随笔為你收集整理的究竟哪种取数据的方式最快?的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 亚洲一区二区网站 | 亚洲成人tv | 日韩国产毛片 | h片在线免费看 | 国产视频高清 | 成人深夜视频 | 日韩中文字幕免费 | 天天碰天天摸 | 中国女人特级毛片 | 精品少妇一区二区三区密爱 | 精品无码av在线 | 国产人免费人成免费视频 | 国产探花在线观看 | 黄色片成人| 国产大片91 | 夜夜春影院 | 天天高潮夜夜爽 | 波多野结衣视频在线观看 | 九草影院| 日韩精品电影一区二区 | 乱老熟女一区二区三区 | 国产成人在线免费 | 午夜av免费观看 | 国产精品三级 | 亚洲天堂首页 | 国产一级在线免费观看 | 韩日午夜在线资源一区二区 | freesexvideos第一次 | 涩视频在线观看 | 激情综合视频 | 操三八男人的天堂 | 天天色天天干天天色 | 午夜影院毛片 | 两性午夜免费视频 | 伊人视频 | 亚洲av无码一区二区二三区软件 | 伊人黄色片 | 日韩成人精品一区 | 久久精品牌麻豆国产大山 | 色欲色香天天天综合网www | 美女诱惑av | 国产一级片麻豆 | 国产午夜精品久久久久久久久久 | 粉嫩av蜜桃av蜜臀av | 久久久久久亚洲精品中文字幕 | 欧美日韩五月天 | 亚洲欧美国产精品专区久久 | 久久一 | 久草视频播放 | 天天干天天操 | 成人不卡视频 | 国产精品区一 | 中文字幕导航 | 久久人人精品 | 亚洲在线电影 | 国产综合图区 | 日韩在线观看中文字幕 | av中文在线观看 | 精品一区二区三区电影 | 天天看黄色片 | 久久久久亚洲AV成人网人人小说 | 久久久成人精品一区二区三区 | 欧美日韩在线播放视频 | 欧美精品二区三区四区免费看视频 | 毛片a片免费看 | 51ⅴ精品国产91久久久久久 | 成年人在线免费看 | 久章草在线观看 | 精品成在人线av无码免费看 | 樱花电影最新免费观看国语版 | 国内视频精品 | 国产精品丝袜在线观看 | 日本欧美激情 | 欧美一区二区三区电影 | 亚洲黄色三级视频 | 蜜桃做爰免费网站 | 麻豆精品| 国产精品骚| 欧美射| 草草影院国产第一页 | av无限看| 冲田杏梨在线 | 欧美精品123| 夜夜成人| 女人的洗澡毛片毛多 | 三级色网 | 欧美黄色影院 | 亚洲国产视频一区二区三区 | 午夜福利电影 | 色妞网站 | 91久久久久国产一区二区 | 日韩亚射吧 | 一区二区乱子伦在线播放 | 日韩av手机在线播放 | 日日干视频 | 国产91在线观看丝袜 | 桃谷绘里香在线播放 | 一级片欧美 | 91亚洲欧美激情 |