14

我一直在尋找比較L2S和EF的最新性能基準,並且找不到任何使用發佈的EF版本調用存儲過程的測試。所以,我跑了一些我自己的測試,發現了一些有趣的結果。Linq To Sql vs實體框架性能

這些結果看起來不錯嗎?我應該以不同的方式測試它嗎?

的情況下,存儲過程的一個調用的一個實例: (死鏈接)上下文

一個實例,相同存儲過程的多個呼叫: (死鏈接)的

多個實例上下文,同一個sproc的多個調用: (死鏈接)

+0

將上下文創建行放在using()塊中時會發生什麼?那些持續時間較長的呼叫可能是由於系統在池中沒有連接...? – 2008-11-02 16:39:18

+2

您可能還希望對更新,刪除和插入性能進行基準測試。 – DamienG 2008-11-02 22:42:34

+0

你的數據代碼通常是這樣嗎?不知何故,它看起來不像真正的數據訪問代碼......測試循環與真實數據訪問模式的外觀沒有什麼共同之處。 – 2008-12-04 04:26:25

回答

7

我認爲你應該用一種稍微不同的方式測試它,以便區分startup costs vs. execution costs。實體框架,特別是,有大量的startup costs resulting from the need to compile database views(雖然你可以提前做到這一點)。同樣,LINQ有一個compiled query的概念,如果多次執行查詢,這將是適當的。

對於許多應用程序來說,查詢執行成本將比啓動成本更重要。對於某些人來說,情況正好相反。由於它們的性能特徵不同,我認爲區分它們很重要。特別是,將啓動成本平均分配到重複執行的查詢的平均成本中會產生誤導。

2

我做了幾個測試asp.net頁面試圖看看哪個更好。我的測試是:

刪除10000條記錄 插入10000條記錄 編輯10000條記錄 數據綁定的10000條記錄到頁

我期待LinqToSQL要快於GridView和顯示器,但做上述LinqToSQL約需2分鐘LinqToEntities不到20秒。

至少在這個測試中,LinqToEntities似乎更快。我的結果似乎也與你的匹配。

我沒有嘗試插入/編輯/刪除/顯示超過1個表連接在一起雖然。

我很想了解更多......或者如果我的測試不是有效的測試類型,我會對看到一些真正的測試感興趣。