2011-11-15 163 views
2

我正在和我的一位同事進行討論。我們在工作中使用Linq to Sql,並且我在工作中有點新,所以我問他爲什麼我們不使用Linq to Entities?他提出了一些論點,其中一個是「因爲Linq to Entities比Sql慢」。我對此持懷疑態度,我知道Linq to Entities更復雜,並具有附加功能,但我不明白爲什麼它會變慢。Linq to SQL比Linq to Entities更快嗎?

Linq to Entities是否變慢?對這樣的論點會有什麼好的迴應?

+3

問問你的同事向你展示了基準。 – Oded

+3

**這取決於!** - 一如既往:-) Linq-to-SQL是一個非常簡單的單層映射 - 表格成爲.NET中的一個類。實體框架要複雜得多,您可以將多個表映射到單個類。所以對於簡單的場景:是的,Linq-to-SQL肯定會更快一點。 **但是:** EF(至少在v4中)允許非常好的整合存儲過程,這可以再次提升你的性能--L2S有點凌亂和sprocs笨重......所以這可能是一個加EF4再次.... –

+1

此外,我相信由EF4生成的SQL通常有點「成熟」,並且可能比由Linq-to-SQL生成的某些SQL語句稍微快一點。但差異可能是相當罕見的,只發生在特定的使用情況..... –

回答

5

這可能是由於早期版本的實體框架中的性能問題。

在早期版本中,在Entity Framework中翻譯質量很差的查詢存在很多問題。後來的版本解決了許多這些問題,所以現在我認爲它可能是更好的或者更好的性能。

這就是說,它真的取決於你正在測試的東西 - 基準測試和分析是唯一可以說明的方法。對於某些操作,Linq To SQL會更快 - 但EF在其他操作上也會更快。這就是說,EF現在允許更多的機會來解決限制和問題,所以隨着時間的推移可能會更加可調。

+0

不要忘了提及LINQ to SQL是「完成」:-) – Steven

+0

@Steven雖然我同意這是一個非常好的理由,不要選擇它用於新的開發,它對它的性能沒有影響;) –

+3

+1。還值得注意的是,下一個版本的實體框架承諾會自動緩存查詢,這可能會使其當前版本和LINQ to SQL顯着提升性能。 – StriplingWarrior

1

就純性能而言LINq To SQL應該稍微快一些,因爲它使用單層映射,而Linq to Entities有兩層映射,並且額外映射可能會產生性能成本。

但是你應該做一些標杆自己利用的情況下,因爲性能差異可能是沒有注意到大部分的時間...