成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

LINQ To SQL的一點討論

開發 后端
LINQ To SQL操作的討論這里主要向你介紹了LINQ To SQL分頁失敗后會有什么結果呢?那么本文就向你介紹了相關的一些討論以及比較,希望對你有所幫助。

LINQ To SQL分頁失敗后會有什么結果呢?關于使用LINQ To SQL分頁有什么需要注意的么?LINQ To SQL分頁的實質是什么呢?那么本文就向你介紹具體的內容。

從微軟發布Linq To SQL依此,程序員圍繞其與SqlDataAdapter等相比進行討論,根據CSDN上的報道,LINQ比SqlDataReader落后的速度不超過10%。更加相信微軟對Linq性能的分析會結合算法和統計結果來比較,對于linq查詢性能--博客園的黃昕已經有所分析。于是產生想實驗一下Linq和SqlDataAdapter等分別在大數據量下進行分頁。園子里的Yzl的研究室已經對Linq分頁可能出現的問題提出一種情況。(以下只是實驗過程并非測試所以沒有benchmark).

LINQ To SQL分頁實驗步驟:LINQ To SQL分頁之對于數據庫:

數據庫名People;數據表名Prof 包括ID Name Age三個字段;記錄數 10萬條(也許不是很足夠)下面的數據庫代碼并非最佳方案,大家貼一下自己的

  1.  
  2. CREATE DATABASE People  
  3. ON  
  4. Primary  
  5. (  
  6. NAME='people',  
  7. FILENAME='D:\people_Data.mdf',  
  8. SIZE=10,  
  9. FILEGROWTH=10%  
  10. )  
  11.  
  12. LOG ON  
  13. (  
  14. NAME='peoplelog',  
  15. FILENAME='D:\people_Log.ldf',  
  16. SIZE=10,  
  17. FILEGROWTH=10%  
  18. )  
  19. GO  
  20. USE People  
  21. CREATE TABLE Prof  
  22. (  
  23. ID INT IDENTITY(1,1) NOT NULL,  
  24. Name NVARCHAR(100) COLLATE Chinese_PRC_CI_AS NULL ,  
  25. Age INT NULL,  
  26. )  
  27.  
  28. GO  
  29.  
  30.   SET IDENTITY_INSERT Prof ON  
  31.  DECLARE @i INT,@age INT  
  32.  SET @i=1  
  33.  WHILE @i<=100000  
  34.  BEGIN  
  35.   SET @age=CAST((RAND()*(100-20)+20)AS INT)  
  36.   INSERT INTO Prof(ID,Name,Age)  
  37.  VALUES(@i,'Name_'+ CAST(@age AS NVARCHAR),@age)  
  38.   SET @i=@i+1  
  39.  END  
  40. SET IDENTITY_INSERT Prof OFF  

測試代碼一(SQL部分):

網上已經有很多非常好的分頁算法,各人按照設計的需要選擇合適的為好,特別提一下Thin的算法(很簡潔),測試中采用了李洪根發布的其中一種分頁算法

DivPage

  1. //省略行參數設置和拼接  
  2. string strcmd = "SELECT TOP 20 * " +  
  3. "FROM Prof " +  
  4. "WHERE (ID >" +  
  5. "(SELECT MAX(ID) FROM (  
  6.  
  7. SELECT TOP 60000 id FROM Prof ORDER BY id) AS T))  ORDER BY ID";  

顯示查詢耗時:00:00:00.0322245

測試代碼二(Linq部分)

Linq To SQL的分頁主要通過Skip和Take操作符實現,代碼如下:

  1. //省去設置參數  
  2. //分頁Skip(PageSize * PageIndex).Take(PageSize)  
  3. PeopleDataContext dc = new PeopleDataContext();  
  4. var query =   
  5. (from p in dc.Prof select p).Skip(60000).Take(20); 

然而卻出現異常:此提供程序只支持對返回實體或投影(包含所有標識列)的有序查詢使用 Skip(),這種查詢為單表(非聯接)查詢,或者為 Distinct、Except、Intersect 或Union (非 Concat)操作。第一次遇到這種異常(當然很多朋友并不會,而且已經看出問題所在了),查找Skip的定義

  1. public static IEnumerable<TSource> Skip<TSource>(  
  2. this IEnumerable<TSource> source,  
  3. int count  

此方法通過使用延遲執行實現。即時返回值為一個對象,該對象存儲執行操作所需的所有信息。只有通過直接調用對象的 GetEnumerator 方法或使用 Visual C# 中的 foreach(或 Visual Basic 中的 For Each)來枚舉該對象時,才執行此方法表示的查詢。再看一下該查詢生成的SQL代碼:

  1. SELECT TOP 20 [t0].[ID], [t0].[Name], [t0].[Age]  
  2. FROM [dbo].[Prof] AS [t0]  
  3. WHERE NOT (EXISTS(  
  4. SELECT NULL AS [EMPTY]  
  5. FROM (  
  6. SELECT TOP 60000 [t1].[ID]  
  7. FROM [dbo].[Prof] AS [t1]  
  8. AS [t2]  
  9. WHERE [t0].[ID] = [t2].[ID]  
  10. )) 

Skip查詢需要數據標識列提供查詢的根據,是否可以假設Skip是通過標識列的唯一性來逐一返回對象的呢?
修改數據庫People表Prof,設置其ID為主鍵,(上面的數據庫相應修改為)

  1.  ALTER TABLE Prof  
  2. ADD CONSTRAINT PK_ID PRIMARY KEY (ID)  
  3. GO 

再次運行,顯示查詢耗時:00:00:00.0478485

LINQ To SQL分頁問題的提出

1.為什么兩次查詢的耗時相差那么大呢?(估計是個人機器以及代碼問題:))

2.Skip是否通過主鍵的唯一性逐次返回查詢對象?

LINQ To SQL分頁總結:

SQLServer的執行效率是按照語義來執行的,也許Linq在性能上不一定和SQLDataAdapter等完全一樣,但是在開發效率上,我們可以看出Linq的實現代碼的簡易性是相對較好的,只要克服其中的一些問題,相信Linq會為以后的數據查詢提供更強大幫助!

LINQ To SQL相關的內容就向你介紹到這里,希望對你了解和學習LINQ To SQL有所幫助。

【編輯推薦】

  1. LINQ查詢方式的探尋
  2. LINQ查詢的效果分析
  3. LINQ查詢和泛型類型的關系淺析
  4. LINQ動態查詢的實現淺析
  5. LINQ TO SQL動態修改表名稱的實現淺析
責任編輯:仲衡 來源: ittang.com
相關推薦

2009-09-14 20:17:05

并行LINQ

2009-09-14 16:00:51

LINQ基本操作LINQ

2010-05-20 15:29:43

優化IIS

2012-03-27 08:49:19

Json

2009-07-09 15:09:05

JDK卸載

2025-05-29 00:00:00

UI 庫前端模塊化

2016-04-05 10:12:58

HiveSQLHadoop

2016-01-06 09:49:59

青云/SDN

2014-06-04 10:48:38

Swift蘋果iOS

2012-07-12 10:49:53

項目管理

2011-07-04 09:33:04

惠普轉型李艾科

2013-01-08 10:06:43

創業創業方法

2009-09-17 17:34:23

linq to sql

2017-09-27 13:42:42

數據庫MySQL斷電恢復

2013-03-06 10:19:56

重構架構設計

2010-09-25 16:47:51

SQL查詢

2009-09-16 09:56:42

LINQ to SQL

2011-03-15 10:41:05

內部類

2009-12-15 14:27:30

Ruby存取器

2009-08-19 11:23:12

C#操作Word
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 精品久久久久久亚洲综合网 | 久久久毛片 | 日韩一区二区三区在线观看 | 99热这里有精品 | 精品欧美乱码久久久久久 | 欧美天堂在线观看 | a级黄色片视频 | 亚洲啪啪 | 日本a v在线播放 | 日韩电影一区二区三区 | 男人的天堂在线视频 | 日韩精品一区二区三区在线播放 | 第四色狠狠 | 欧美在线一区二区视频 | 99reav | 国产人成精品一区二区三 | 国产精品a久久久久 | 一区二区三区亚洲 | 成人国产一区二区三区精品麻豆 | 成年男女免费视频网站 | 久久久青草 | 日韩中文字幕一区 | 国产亚洲一区在线 | 亚洲一级毛片 | 国产97人人超碰caoprom | 亚州国产| 久久a久久 | 激情六月丁香婷婷 | 日韩在线小视频 | 天天操天天射综合 | 最新国产精品精品视频 | 国产日韩久久久久69影院 | 亚洲精品乱码久久久久久9色 | 国产一级片一区二区三区 | 国产91在线精品 | 一区二区三区 在线 | 青青草华人在线视频 | 在线高清免费观看视频 | 91麻豆蜜桃一区二区三区 | 密桃av| 中文欧美日韩 |