原文: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%左右。