2008-12-03 68 views
1

我想規劃一個數據訪問層,我想使用Linq。 我讀過linq有它的性能問題,你可以使用linq存儲過程。 在規劃我的數據訪問層時,我應該使用帶有linq的存儲過程嗎?這對性能至關重要嗎?我應該什麼時候使用它們? 我知道存儲過程對於安全至關重要,但linq使用類型安全查詢,所以存儲過程的唯一原因就是性能。在存儲過程中使用Linq

感謝,

歐米

+0

「存儲過程對於安全是必不可少的,但linq使用類型安全查詢」 - 這沒有意義 – TheSoftwareJedi 2008-12-04 04:06:14

回答

2

從我已閱讀,通過LinqToSql生成的查詢的服務器緩存執行計劃,因此這些查詢會相當於將存儲過程的執行大致相同的方式。如果你使用存儲過程,那麼你失去了使用LinqToSql獲得的優勢,因爲你的查詢邏輯將留在數據庫中。

請參閱Rico Mariani的blog series關於LinqToSql性能的更多信息,以及this blog post

2

如果你只是寫簡單的CRUD,存儲過程不可能幫助你提高性能。據我所知,存儲過程的執行路徑與準備好的語句幾乎相同 - 即適當優化和緩存。

當你完全可以在數據庫中完成工作時,它們會產生很大的不同,否則這些工作將會涉及到數據庫的多次往返(同時還有網絡流量和延遲)。

你從哪裏讀到LINQ有性能問題?我知道一個特定的問題是通過預編譯查詢來解決的,但除此之外,我認爲它基本上是可以的...

+0

我在谷歌搜索了LINQ和性能,發現了一堆討論這個問題的鏈接。 正如我所理解的LINQ建立在ADO.net上,所以它不能更快​​.. 謝謝, Omri – Omri 2008-12-03 15:10:47

0

我會推薦使用LINQ或存儲過程,但不能同時使用 - 沒有真正的原因把兩者結合起來,你不會在表現方面獲勝。 LINQ對小規模網絡應用程序,大規模網絡應用程序的存儲過程或更好的可擴展性很有用

問題不僅在於性能,因爲Web應用程序在用戶數量,服務頁數等方面的增長...它也成爲一個維護問題。如果您的查詢隨着時間的推移變得更加複雜,那麼您的LINQ代碼可能成爲維護的噩夢。存儲過程很好地隱藏在數據庫層中。而且......不管別人怎麼說,在數據庫級別執行的查詢總是會更快地執行。