C# 实体框架4和实体框架3.5的性能如何?

C# 实体框架4和实体框架3.5的性能如何?,c#,linq,performance,entity-framework,linq-to-entities,C#,Linq,Performance,Entity Framework,Linq To Entities,我的页面上有一个查询,使用EF3.5执行该查询至少需要半秒钟。当我使用存储过程时,速度明显更快。这是一个非常复杂的查询。在即将到来的EF 4.0中会有任何性能改进吗?EF 4.0真的在性能方面击败了3.5吗?来自: 自定义查询–添加对现有LINQ运算符的支持, 识别一组更大的模式 使用LINQ,可以定义编写模型 功能以及 在LINQ中使用这些,以及一些 创建和自定义的其他方法 查询 SQL生成可读性改进–改进 可读性,以及TSQL 的性能优化 生成的查询使其更加 更容易理解正在发生的事情 因此,

我的页面上有一个查询,使用EF3.5执行该查询至少需要半秒钟。当我使用存储过程时,速度明显更快。这是一个非常复杂的查询。在即将到来的EF 4.0中会有任何性能改进吗?EF 4.0真的在性能方面击败了3.5吗?

来自:

自定义查询–添加对现有LINQ运算符的支持, 识别一组更大的模式 使用LINQ,可以定义编写模型 功能以及 在LINQ中使用这些,以及一些 创建和自定义的其他方法 查询

SQL生成可读性改进–改进 可读性,以及TSQL 的性能优化 生成的查询使其更加 更容易理解正在发生的事情

因此,这两点意味着您可以看到它从LINQ生成查询的方式有所改进

然而,ORM不太可能比您从头开始编写的查询执行得更好,因为它必须满足如此多不同的场景,通常最常见的场景是默认的。当我使用EF3.5时,它似乎产生了一些非常有效的联接SQL,这可能是我从ORM中看到的最好的联接SQL,因此希望您可以在4.0中抛弃SP


如果你有一个存储过程,我猜这是一个很大的查询——每次将这个SQL文本发送到服务器都会导致大量的网络流量,这是你可能没有考虑到的另一件事。显然,在同一台服务器上或在同一个内部网络中,这是一种“剪头发减肥”风格的优化。

简单的回答是,现在说还为时过早。在4月12日的版本最终确定并本地化之前,.Net的人几乎完全关注性能。还有,什么是更快?可以通过多种方式查看“更快”,例如:

  • ,仅目标跟踪的改进就可能意味着巨大的胜利,因为你自己并没有做那些手工工作……无论如何,至少开发速度更快
  • 如果它以前根本不起作用,那么在处理大量对象时,重量较轻的对象也可能意味着移动的内存要少得多。无论从数据库获取时填充额外属性的成本有多小,实例化和跟踪它们都会有成本(加载时间和内存消耗)
在您的特定情况下,除了非常复杂或高容量的查询外,半秒钟是很长的时间……您是否查看过在数据库中花费了多少时间以及.Net拥有数据后花费了多少时间?如果您大部分时间都在SQL之外,那么是的,Net4.0中反射的基本改进应该会为您提供一些速度改进……但是,如果您将所有时间都花在SQL上,这将毫无帮助。大部分性能问题可能是生成的SQL的索引,而不是实体框架性能


我会跟随凯恩的评论,看看它为您的查询生成的SQL,您是否可以发布这篇文章以及快速的存储过程,以便我们可以找到问题所在?

当涉及到真正复杂的查询时,我没有看到任何证据表明L2S、NH、,或者EF可以生成比存储过程更好的查询计划。我喜欢ORM(特别是NH),但是仍然有一些时候,ORM的执行时间会受到编写良好的存储过程的限制

在一个附带问题上,您是否查看了存储过程与EF3.5生成的存储过程之间的执行计划差异?