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

百寶箱剖析ADO.NET Entity框架性能

開發 后端
這里介紹了ADO.NET Entity框架的性能,演示了如何提高簡單查詢速度的方法,并闡釋了框架的性能特征。希望大家可以從中得到收獲。

#T#在網上看到一篇文章是關于講解ADO.NET Entity框架。看了之后深有體會,在這里我就把我所看到的和大家在一起分享一下。ADO.NET團隊最近討論了ADO.NET Entity框架的各種性能特征。ADO.NET Entity框架在12月已經進入它的第三個beta版本,自那時起開發團隊就開始為開發人員提供了使用該框架的相關信息。而現在,則為開發人員提供了框架性能方面的信息。

本文鞭辟入里地介紹了ADO.NET Entity框架的性能,演示了如何提高簡單查詢速度的方法,并闡釋了框架的性能特征。需要重點指出的是,當一個抽象層或者類似EDM(譯注:指Entity Data Model)的模塊被用來轉換數據庫的關系樣式時,會帶來一定的性能損失。

查詢與結果

本文使用了NorthWind數據庫作為模型,并創建了一個簡單查詢:

  1. (NorthwindEntities ne = NorthwindEntities()) { (Order o ne.Orders) { i = o.OrderID; } } 

測試時,我們的每個查詢對整個848行數據進行了10次遍歷。結果很有意思,第1次運行時耗費了4241毫秒,而接下來的每次運行則平均耗費13毫秒左右的時間。最耗時的一部分內容是ObjectContext的創建,而在執行任意一個訪問數據庫的操作時,都會有一些耗時的操作發生。耗時百分比值最大的是視圖生成,它達到了驚人的56%。既然視圖生成是造成性能損耗的罪魁禍首,那么開發人員最好是使用命令行工具EDM生成器(EdmGen.exe),運行時需要加上視圖生成命令參數(/mode:ViewGeneration),它的輸出內容為一個代碼文件(C#或者VB.NET),可以包含在項目中。視圖的預生成可以將啟動時間降低到2933毫秒,而對于循環遍歷操作,整個時間可以降低28%。生成視圖并隨著應用程序一起發布是提高性能的妙方,但其缺點則在于視圖不再是動態的,一旦模型發生改變,就需要重新生成以保持同步。

ADO.NET Entity框架查詢性能

需要指出的是關于性能的主要設計要素是查詢緩存。一旦執行了查詢,它的一部分內容就被維持在全局緩存中。由于查詢與元數據緩存的存在,使得第二次運行的執行速度總是比第一次運行快。例如,如下的Entity SQL查詢:

  1. (PerformanceArticleContext ne = PerformanceArticleContext())   
  2. { ObjectQuery<Orders> orders = ne.CreateQuery<Orders>();   
  3. (Orders o orders) { i = o.OrderID; } } 

第一次運行該查詢耗時179毫秒,但下一次運行則只耗費了15毫秒的時間。首次運行與后續運行在執行方面的區別在于它構建了能夠為執行傳遞provider的命令樹(command tree)。

ADO.NET Entity框架之LINQ查詢在執行方式上與Entity SQL查詢相似。例如,下面的查詢:

  1. (PerformanceArticleContext ne = PerformanceArticleContext())  
  2. { var orders = from order ne.Orders select order;   
  3. (Orders o orders) { i = o.OrderID; } } 

首次執行LINQ查詢耗時202毫秒,而隨后的執行耗時18毫秒,兩者的差距還要低于Entity SQL。可以看到,使用編譯了的LINQ查詢對于性能的提高更為明顯。編譯LINQ查詢的好處在于它構建了表達樹(expression tree),當查詢被編譯時,后續的執行就不需要重建表達樹了。編譯的LINQ查詢代碼看起來像這樣:

  1. Func<PerformanceArticleContext, IQueryable<Orders>> compiledQuery 
    CompiledQuery.Compile((PerformanceArticleContext ne) => (from o ne.Orders select o));   
  2. (PerformanceArticleContext ne = PerformanceArticleContext()) { (Orders o compiledQuery(ne)) { i = o.OrderID; } }  

注意,PerformanceArticleContext是一個委托。對于編譯了的LINQ查詢而言,第一次執行耗時305毫秒,而隨后的執行時間則為15毫秒。結果并不驚人,值得關注的是編譯的LINQ查詢比之常規方式的LINQ查詢,執行時間少了3毫秒。或許對于幾個查詢而言,這算不上什么,但如果有數以千計的查詢,這樣的性能提升就倍顯價值所在了。

責任編輯:田樹 來源: 博客
相關推薦

2009-11-12 14:18:19

ADO.NET分頁

2009-11-03 16:57:34

ADO.NET FAQ

2009-10-27 13:14:35

VB.NET窗體應用

2015-09-22 15:24:27

SDNDocker

2015-09-22 16:11:41

SDNDocker

2009-10-28 09:48:31

VB.NET XmlR

2009-10-28 14:51:33

VB.NET設計制作窗

2009-10-28 13:54:38

linux安裝顯卡驅動

2009-10-27 15:42:04

VB.NET文件對象

2009-10-28 12:05:32

linux監控技術

2011-04-13 09:40:27

2009-11-05 11:12:21

WCF自宿主

2009-10-28 18:35:10

Linux基礎用戶

2009-12-30 10:02:37

ADO.NET Ent

2009-11-09 11:31:47

WCF消息隊列

2009-11-13 13:35:54

ADO.NET數據服務

2025-04-17 08:28:13

2009-11-16 14:52:16

PHP數組

2009-11-12 10:45:45

ADO.NET連接測試
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 国产精品久久久久aaaa樱花 | 欧美激情精品久久久久久 | 成人免费一区二区三区视频网站 | 久久久久网站 | 国产激情一区二区三区 | 四虎影视免费在线 | 亚洲精品乱码久久久久久按摩观 | 日韩最新网站 | 久一精品 | 免费日本视频 | 午夜免费 | 免费亚洲视频 | 亚洲毛片 | 国产欧美日韩一区二区三区 | 亚洲激情一区二区三区 | 91精品久久久久久久久久 | 国产一区不卡 | 久草在线免费资源 | 国产一区免费视频 | 久久三区| 精品乱子伦一区二区三区 | 黄色大片免费网站 | 亚洲一区二区 | 日韩精品久久久久 | 亚洲精品大片 | 欧美三级电影在线播放 | 国产999在线观看 | 色婷婷精品久久二区二区蜜臂av | 国产精品一区二 | 激情欧美一区二区三区中文字幕 | 国产精品黄视频 | 日本午夜在线视频 | 日韩av免费在线观看 | 91亚洲精选| 秋霞在线一区 | 亚洲理论在线观看电影 | 91资源在线观看 | 国产乱码久久久久久一区二区 | 日韩精品一区二区三区在线播放 | 国产美女在线精品免费 | 极品粉嫩国产48尤物在线播放 |