我一直在尋找比較L2S和EF的最新性能基準,並且找不到任何使用發佈的EF版本調用存儲過程的測試。所以,我跑了一些我自己的測試,發現了一些有趣的結果。Linq To Sql vs實體框架性能
這些結果看起來不錯嗎?我應該以不同的方式測試它嗎?
的情況下,存儲過程的一個調用的一個實例: (死鏈接)上下文
一個實例,相同存儲過程的多個呼叫: (死鏈接)的
多個實例上下文,同一個sproc的多個調用: (死鏈接)
我一直在尋找比較L2S和EF的最新性能基準,並且找不到任何使用發佈的EF版本調用存儲過程的測試。所以,我跑了一些我自己的測試,發現了一些有趣的結果。Linq To Sql vs實體框架性能
這些結果看起來不錯嗎?我應該以不同的方式測試它嗎?
的情況下,存儲過程的一個調用的一個實例: (死鏈接)上下文
一個實例,相同存儲過程的多個呼叫: (死鏈接)的
多個實例上下文,同一個sproc的多個調用: (死鏈接)
我認爲你應該用一種稍微不同的方式測試它,以便區分startup costs vs. execution costs。實體框架,特別是,有大量的startup costs resulting from the need to compile database views(雖然你可以提前做到這一點)。同樣,LINQ有一個compiled query的概念,如果多次執行查詢,這將是適當的。
對於許多應用程序來說,查詢執行成本將比啓動成本更重要。對於某些人來說,情況正好相反。由於它們的性能特徵不同,我認爲區分它們很重要。特別是,將啓動成本平均分配到重複執行的查詢的平均成本中會產生誤導。
我做了幾個測試asp.net頁面試圖看看哪個更好。我的測試是:
刪除10000條記錄 插入10000條記錄 編輯10000條記錄 數據綁定的10000條記錄到頁
我期待LinqToSQL要快於GridView和顯示器,但做上述LinqToSQL約需2分鐘LinqToEntities不到20秒。
至少在這個測試中,LinqToEntities似乎更快。我的結果似乎也與你的匹配。
我沒有嘗試插入/編輯/刪除/顯示超過1個表連接在一起雖然。
我很想了解更多......或者如果我的測試不是有效的測試類型,我會對看到一些真正的測試感興趣。
這看起來是LINQ to SQL和Entity Framework之間性能的一個很好的度量。
http://toomanylayers.blogspot.com/2009/01/entity-framework-and-linq-to-sql.html
將上下文創建行放在using()塊中時會發生什麼?那些持續時間較長的呼叫可能是由於系統在池中沒有連接...? – 2008-11-02 16:39:18
您可能還希望對更新,刪除和插入性能進行基準測試。 – DamienG 2008-11-02 22:42:34
你的數據代碼通常是這樣嗎?不知何故,它看起來不像真正的數據訪問代碼......測試循環與真實數據訪問模式的外觀沒有什麼共同之處。 – 2008-12-04 04:26:25