<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      EntityFramework5的性能到底提高在哪里了?

            微軟官方數(shù)據(jù)說,EF5.0的性能比EF4.x提高了很多倍。但是到底EF5.0為什么會比EF4.x提高那么多倍呢?到底是對哪一部分進行了性能優(yōu)化呢?今天我們就來一探究竟。

            為了解釋這一問題,引入一段普通的數(shù)據(jù)庫查詢代碼:          

                     using (var db = new ProductContext()) 
                    {
                          var allFoods = from p in db.Products
                                         where p.CategoryId == "FOOD"
                                         orderby p.Name
                                         select p;
                          Product productss = allFoods.First();
                      } 

       上面代碼非常好理解,就是查找符合條件的第一個food,延遲查詢,真正查詢是在First()執(zhí)行的時候開始的,這個大家都懂,但是大家知道在執(zhí)行這段代碼的時候EntityFramework為我們做了哪些工作嗎?讓我們一步一步分析一下這段代碼:

      首先: 

             using (var db = new ProductContext()) 這個沒什么好解釋的,就是創(chuàng)建一context對象。

      其次: 

                          var allFoods = from p in db.Products
                                         where p.CategoryId == "FOOD"
                                         orderby p.Name

                                         select p; 

      這段代碼是查詢表達式的創(chuàng)建,因為是延遲查詢,所以并未做任何工作,僅僅是一段用Linq語法寫的代碼而已。

      最后:

       Product productss = allFoods.First();

      這句代碼才是今天的主題部分,讓我們對他進行一些內部的跟蹤:

             1.元數(shù)據(jù)加載

             2.視圖的生成

             3.解析linq查詢中的參數(shù)

             4.查詢轉換  就是將Linq語句通過linq引擎轉化為SQL語句

             5.生成具體的查詢字符串,為數(shù)據(jù)庫查詢做實質性的準備

             6.數(shù)據(jù)庫查詢 ,分為以下三個步驟,也就是我們以前經產用的ADO.NET查找數(shù)據(jù)過程

                        *Connection.open()

                        *Command.ExcuteReader()

                        *DataReader.Read()

             7.通過查詢的數(shù)據(jù)庫生成實體對象,也就是我們查詢拿到的結果對象集

             8. Connection.Close()

      上面的過程是整個EF進行一次數(shù)據(jù)查詢的過程, 之所以介紹這個,希望讀到這篇文章的您能理解EF到底為我們做了些什么東西?知道了這些過程,之后再對這些過程進行一些性能分析,真正解析EF5在性能上為什么快于EF4? 微軟到底在哪個過程做了手腳。

      之前我在http://www.rzrgm.cn/A_ming/archive/2012/08/17/2643266.html一文中提到過

      一次通過Linq to Entity 查詢性能與之前版本幾乎一樣,但第二次及以后在進行同樣查詢就大大不一樣了”

      這里提到的第一次查詢,稱之為“冷查詢”

      第二次進行相同的查詢,稱之為”熱查詢“


      但是不管是”冷查詢“還是”熱查詢“,都要經歷以上我們剛剛討論的步驟,但是在每一步所花費的時間可就不一樣了,這也就是為什么熱查詢要快于冷查詢的原因了,究其原因在于Cache,請看下表:

         冷查詢:   


       

                                                                  EF4性能表現(xiàn)                                    EF5性能表現(xiàn)

              1.元數(shù)據(jù)加載                               影響很大,但做Cache                        影響很大,但做Cache

             2.視圖的生成                                 可能影響很大,但做Cache                  可能影響很大,但做Cache

             3.解析linq查詢中的參數(shù)                    影響一般                                        影響很小(性能改善了

             4.查詢轉換                                    影響一般                                        影響一般,但做Cache 

             5.生成具體的查詢字符串                   影響一般,但做Cache                        影響一般,但做Cache 

             6.數(shù)據(jù)庫查詢                                 可能會非常高                                   可能會非常高

                        *Connection.open()                                               (在某些情況下進行了一定處理,性能提高)

                        *Command.ExcuteReader()

                        *DataReader.Read()

             7.通過查詢的數(shù)據(jù)庫生成實體對象        影響一般                                          影響一般

             8. Connection.Close()                   影響一般                                           影響一般

       

         熱查詢:


       

                                                          EF4性能表現(xiàn)                                        EF5性能表現(xiàn)

              1.元數(shù)據(jù)加載  打                          很低,因為在冷查詢中做了cache           很低,有Cache緣故

             2.視圖的生成                                 很低,原因同上                                很低,同上

             3.解析linq查詢中的參數(shù)                    影響一般                                         影響很小(性能改善了

             4.查詢轉換                                    影響一般                                          很低,有Cache

             5.生成具體的查詢字符串                    很低,有Cache                                 很低,有Cache

             6.數(shù)據(jù)庫查詢                                 可能會非常高                                    可能會非常高

                        *Connection.open()                                               (在某些情況下進行了一定處理,性能提高)

                        *Command.ExcuteReader()

                        *DataReader.Read()

             7.通過查詢的數(shù)據(jù)庫生成實體對象        影響一般                                           影響一般

             8. Connection.Close()                   影響一般                                            影響一般 

       

      結論:

      從以上兩張表可以看出,無論是冷查詢,還是熱查詢,EF5的性能都要比EF4要高。

      在冷查詢的表現(xiàn)中,EF5比EF4似乎有微弱優(yōu)勢;但是在熱查詢中,因為EF5在某些步驟中多做了些緩存的處理,所以使得熱查詢的速率提升了不知道多少倍,這個也就是真正的EF5提升性能的原因所在,希望讀者仔細對比表格。查找原因所在。

      所以說,這次EF5的性能提升,主要是針對熱查詢來的,因為在冷查詢中多做了些緩存工作,使得熱查詢可以很快的執(zhí)行。我們都知道,經常一個服務器做的是一些重復的查詢,這些重復的查詢多了,性能的優(yōu)勢在EF5中表現(xiàn)的越出色。

       

       


      備注:希望分享的知識能夠對您有幫助。限于作者水平有限,如果有不對的知識請直接評論指出,謝謝!


      posted @ 2012-08-19 00:26  純粹的郭子  閱讀(7266)  評論(28)    收藏  舉報
      主站蜘蛛池模板: 青草视频在线观看视频| 中文字幕人妻中文AV不卡专区| 亚洲人午夜精品射精日韩| b站永久免费看片大全| 久久天天躁狠狠躁夜夜不卡| 在国产线视频A在线视频| 久久久午夜精品福利内容 | 亚洲天堂网中文在线资源| 玩弄放荡人妻少妇系列| 一本本月无码-| 亚洲一品道一区二区三区| 欧美成人看片黄A免费看| 亚洲人妻系列中文字幕| 无码人妻丰满熟妇啪啪欧美| 久久国产福利播放| 中文字幕日韩精品国产| 激情综合网激情国产av| 国产激情视频在线观看首页| 在国产线视频A在线视频| 高清国产亚洲精品自在久久| 欧美熟妇乱子伦XX视频| 91亚洲国产三上悠亚在线播放| 99久久机热/这里只有精品| 亚洲高清 一区二区三区| 亚洲av色香蕉一区二区| 狠狠综合久久av一区二| 国产精品美女免费无遮挡| 亚洲欧美人成网站在线观看看| 国产精品免费看久久久| 精品无码成人久久久久久| 欧美奶涨边摸边做爰视频| 久久91精品牛牛| 亚洲人成网站观看在线观看 | 精品av综合导航| 久久久久成人片免费观看蜜芽| 黑森林福利视频导航| 久久精品色一情一乱一伦| 国产精品久久久福利| 国产互换人妻xxxx69| 日韩放荡少妇无码视频| 日夜啪啪一区二区三区|