2008-12-03 74 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代码可能成为维护的噩梦。存储过程很好地隐藏在数据库层中。而且......不管别人怎么说,在数据库级别执行的查询总是会更快地执行。