LINQ还是存储过程?哪一个有利?

时间:2012-04-28 09:55:55

标签: asp.net-mvc visual-studio-2008 linq-to-sql stored-procedures c#-3.0

我在Visual Studio 2008中使用C#。我有一个绑定列表视图的aspx页面。从8个表中访问数据。

我应该选择哪一个最佳性能,后面的代码中的存储过程或linq?

哪一个拥有最小的网络流量?

2 个答案:

答案 0 :(得分:2)

存储过程几乎总是更快,并允许更多地控制查询执行,但是在较低流量项目或开发时间表非常短的项目中,构建它们的开发时间可能不合理。

答案 1 :(得分:2)

在大多数情况下都是情境,也取决于数据的大小 首先,始终要检查您的团队当前的编码标准和模式。如果贵公司的标准总是说使用SPROCS,那么遵守这些标准。

大量记录(SPROC)
如果表中的预期数据可能是几十万个记录,那么对于8个表总共有一百万条记录,只返回用LINQ检索一小部分数据可能是完全开销。

LINQ将保留当前在内存中迭代的记录,直到构建预期的结果集。这最有可能是内存中的所有百万条记录+内存中结果集的记录。

另请注意,Visual Studio的内存限制为2GB(无论您获得多少RAM),而不是它的面部(在32位系统的调试模式下,不确定64位)。我过去做过用LINQ查询大数据集的问题,我遇到了内存异常。

在这种情况下,SPROC可能会更快,更安全。

少数记录(LINQ)
另一方面,如果8个表中的每个表中的数据总是相当小而未来变化不大,那么使用LINQ将会产生很小的差异。但是,请测试LINQ中的多个表连接可能比SPROC中的更慢。

编辑(比较/分析执行计划)
另请注意,在大多数情况下,使用LINQ为连接生成的SQL非常有效,不确定.NET 3 / 3.5,但使用SQL事件探查器,您可以看到生成SQL并在SQL中运行它,将其与SPROC执行进行比较计划。