我正在和我的一位同事進行討論。我們在工作中使用Linq to Sql,並且我在工作中有點新,所以我問他爲什麼我們不使用Linq to Entities?他提出了一些論點,其中一個是「因爲Linq to Entities比Sql慢」。我對此持懷疑態度,我知道Linq to Entities更復雜,並具有附加功能,但我不明白爲什麼它會變慢。Linq to SQL比Linq to Entities更快嗎?
Linq to Entities是否變慢?對這樣的論點會有什麼好的迴應?
我正在和我的一位同事進行討論。我們在工作中使用Linq to Sql,並且我在工作中有點新,所以我問他爲什麼我們不使用Linq to Entities?他提出了一些論點,其中一個是「因爲Linq to Entities比Sql慢」。我對此持懷疑態度,我知道Linq to Entities更復雜,並具有附加功能,但我不明白爲什麼它會變慢。Linq to SQL比Linq to Entities更快嗎?
Linq to Entities是否變慢?對這樣的論點會有什麼好的迴應?
這可能是由於早期版本的實體框架中的性能問題。
在早期版本中,在Entity Framework中翻譯質量很差的查詢存在很多問題。後來的版本解決了許多這些問題,所以現在我認爲它可能是更好的或者更好的性能。
這就是說,它真的取決於你正在測試的東西 - 基準測試和分析是唯一可以說明的方法。對於某些操作,Linq To SQL會更快 - 但EF在其他操作上也會更快。這就是說,EF現在允許更多的機會來解決限制和問題,所以隨着時間的推移可能會更加可調。
不要忘了提及LINQ to SQL是「完成」:-) – Steven
@Steven雖然我同意這是一個非常好的理由,不要選擇它用於新的開發,它對它的性能沒有影響;) –
+1。還值得注意的是,下一個版本的實體框架承諾會自動緩存查詢,這可能會使其當前版本和LINQ to SQL顯着提升性能。 – StriplingWarrior
就純性能而言LINq To SQL應該稍微快一些,因爲它使用單層映射,而Linq to Entities有兩層映射,並且額外映射可能會產生性能成本。
但是你應該做一些標杆自己利用的情況下,因爲性能差異可能是沒有注意到大部分的時間...
問問你的同事向你展示了基準。 – Oded
**這取決於!** - 一如既往:-) Linq-to-SQL是一個非常簡單的單層映射 - 表格成爲.NET中的一個類。實體框架要複雜得多,您可以將多個表映射到單個類。所以對於簡單的場景:是的,Linq-to-SQL肯定會更快一點。 **但是:** EF(至少在v4中)允許非常好的整合存儲過程,這可以再次提升你的性能--L2S有點凌亂和sprocs笨重......所以這可能是一個加EF4再次.... –
此外,我相信由EF4生成的SQL通常有點「成熟」,並且可能比由Linq-to-SQL生成的某些SQL語句稍微快一點。但差異可能是相當罕見的,只發生在特定的使用情況..... –