ADO.net,Linq to SQL和Entity Framework效能實測分析 — Windows Live

來源:互聯網
上載者:User

原文:http://longniezhang.blog.163.com/blog/static/146061662009719102423760/

 

ADO.net,Linq to SQL和Entity Framework效能實測分析

  最近文檔寫了不少,導致Word和Excel的使用能力飛一般成長。考慮到項目中讀寫資料庫的方法存在效率不高,以致影響使用者體驗的問題,決 定測試一下Microsoft新推行的Linq和EF能不能在效率上有所改進。

  測試環境當然就是我這台筆記本了,受限與硬碟轉速, 運行起來一定是不如台式機的,但至少保證了三個方案相同的軟硬體環境:Windows Server 2008,Visual Studio 2008,MS SQL Server 2008,清一色的最新產品。

  測試分成六個階段,資料量分別為10,10,100,1 千,1萬,10萬逐級增長,分別測試了讀取、寫入、更改、刪除四個基本的操作的耗時,結果如下(時間單位:秒):

第一次讀寫10條資料

第二次讀寫10條資料

操作100條資料

操作1000條資料

操作10000條資料

操作100000條資料

【測試總結】

  第一階段測試結果非常出人意料,ADO.net和LINQ to SQL操作資料的時間都控制在0.5秒以內,非常的迅速,但是Entity Framework在添加這步表現非常差,由於這五步是連續測試,其中添加資料是第一步操作,而EF在在進行第一步操作的時候足足延遲了3秒鐘!這3秒鐘 到底EF在做什嗎?

  從第二階段開始,效能的優劣就非常明顯的展現在我們面前,第二階段到第六階段,不論操作資料量的大小,圖中的耗 時比例幾乎是相同的。Entity Framework無可爭議的以極高的效率在三種方案中脫穎而出,而LINQ to SQL的龜速修改和刪除操作消耗的時間幾乎是EF的10倍,ADO.net在添加資料上的表現實在不盡如人意,這也跟我們項目底層寫法有關。

   從上面的測試結果可以看出,除去EF在初次操作資料是延遲的3秒鐘(初步認為是初始化時間),EF的平均效率是LINQ to SQL的6倍,是當前項目機制的4倍,這是非常可觀的效率提升,不難理解為什麼微軟幾乎放棄了LINQ to SQL,全力支援EF了。

【深 入分析為什麼第一次執行Entity Framework非常慢的原因】(轉)

第一次建立 ObjectContext並查詢資料時耗費了大量的時間,原因是什嗎?有沒有什麼最佳化的方法?本文將給出一個合理的解釋。

下面這個餅 狀圖給出了第一次建立ObjectContext並用其訪問資料庫時各種操作所佔的時間比

從中可以看出僅僅View Generation一個操作就佔用了56%的時間,不過令人欣慰的是,這個操作只出現在第一次查詢的時候,之後產生好的View會被緩衝起來供以後使 用。一個View.cs檔案的樣本如下:

我們可以使用EDMGen2.exe來自己產生 View.cs,然後把它加入到工程中編譯,這樣會大大縮減View Generation操作所佔的時間比。根據ADO.NET TEAM 的測試,自己編譯View大概會節省28%的時間。不過我在自己電腦上測試的結果沒有那麼理想,大概是8%左右。

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.