【问题标题】:Using Linq with stored procedures将 Linq 与存储过程一起使用
【发布时间】:2008-12-03 09:39:20
【问题描述】:

我想规划一个数据访问层,我想使用 Linq。 我读到 linq 在性能方面存在问题,您可以将存储过程与 linq 一起使用。 在规划我的数据访问层时,我应该使用带有 linq 的存储过程吗?对性能很重要吗?我应该什么时候使用它们? 我知道存储过程对于安全性至关重要,但 linq 使用类型安全查询,因此存储过程的唯一原因是性能。

谢谢,

暗里

【问题讨论】:

  • “存储过程对安全性至关重要,但 linq 使用类型安全查询”——这毫无意义

标签: linq performance stored-procedures


【解决方案1】:

根据我的阅读,服务器缓存了通过 LinqToSql 生成的查询的执行计划,因此这些查询的执行方式与等效的存储过程大致相同。如果您使用存储过程,那么您将失去使用 LinqToSql 获得的优势,因为您的查询逻辑将保留在数据库中。

请参阅 Rico Mariani 的 blog series 关于 LinqToSql 性能的更多信息,以及 this blog post

【讨论】:

    【解决方案2】:

    如果您只是编写简单的 CRUD,则存储过程不太可能帮助您提高性能。据我所知,存储过程的执行路径与准备好的语句几乎相同 - 即适当优化和缓存。

    当您可以完全在数据库中完成工作时,它们会产生很大的不同,否则会涉及到数据库的多次往返(还有网络流量和延迟)。

    您从哪里得知 LINQ 存在性能问题?我知道一个通​​过预编译查询可以解决的特定问题,但除此之外,我认为基本上没问题...

    【讨论】:

    • 我在 google 中搜索了 LINQ 和性能,发现了一堆讨论这个问题的链接。据我了解,LINQ 是建立在 ADO.net 上的,所以它不能更快​​。谢谢,Omri
    • 不,它不会比普通的 ADO.NET 快 - 但您没有询问相对于 ADO.NET 的性能。最主要的是 LINQ 使您的代码更易于管理,并且性能成本最低。
    【解决方案3】:

    我建议使用 LINQ 或存储过程,但不要同时使用两者 - 没有真正的理由将两者结合起来,而且您不会在性能方面取胜。 LINQ 可用于较小规模的 Web 应用程序、较大规模的 Web 应用程序的存储过程或更好的可扩展性

    随着网络应用程序在用户数量、服务页面等方面的增长,问题不仅在于性能……它也成为维护问题。如果您的查询随着时间的推移变得更加复杂,那么您的 LINQ 代码可能会成为维护的噩梦。存储过程很好地隐藏在数据库层中。而且......无论任何人说什么,在数据库级别执行的查询总是会执行得更快。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-12-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-12-11
      • 1970-01-01
      • 2015-05-20
      相关资源
      最近更新 更多