实体框架4与实体框架3.5的表现如何?

时间:2010-01-15 23:00:35

标签: c# linq performance entity-framework linq-to-entities

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

3 个答案:

答案 0 :(得分:3)

简短的回答是说现在还为时过早。 .Net的人几乎完全专注于性能,直到4月12日的发布必须最终确定和本地化。还有什么意思更快?可以通过多种方式查看更快,例如:

  • Entity Framework 4.0 has new features,单独的对象跟踪改进可能意味着巨大的胜利,因为你自己没有做那些手工工作......无论如何,至少开发速度更快。
  • 如果它之前根本不起作用,那么POCO support的重量较轻的物体在处理大量物体时可能意味着更少的内存被移动。无论从数据库中获取时填充的额外属性的成本有多小,实例化和跟踪它们(加载时间和内存消耗)都会产生成本。

在您的特定情况下,对于除了非常复杂或高容量的查询之外的任何事情,半秒是时间...您是否看过在数据库中花费了多少时间以及如何花了很多时间.Net有数据吗?如果你把大部分时间都花在SQL之外,那么是的,Net 4.0中反射的基础改进应该可以为你提供一些速度提升......但是如果你把所有时间花在SQL上,它将无济于事一点都不您的大部分性能问题可能是生成的SQL的索引,而不是实体框架的水合性能。

我会关注Kane的评论,查看它为您的查询生成的SQL,是否可以发布此文件以及 快速存储过程,以便我们可以找到问题所在?

答案 1 :(得分:1)

来自ADO.NET blog

  

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

     

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

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

然而,ORM不太可能超出您从头开始编写的查询,因为它必须满足这么多不同的场景,通常最常见的是默认情况。当我使用它时,EF 3.5似乎产生了一些非常有效的连接SQL,这可能是我从ORM中看到的最好的,所以希望你可以放弃4.0中的SP。

如果你有一个存储过程,我猜这是一个大问题 - 每次向服务器发送这个SQL文本都会导致很多网络流量,这是你可能或可能没有考虑过的另一件事。显然,在同一台服务器上或同一内部网络内部,这样可以“减少头发减肥”的风格优化。

答案 2 :(得分:0)

当涉及到非常复杂的查询时,我没有看到任何证据表明L2S,NH或EF中的任何一个都可以生成比我在sproc中更好的查询计划。我喜欢ORM(尤其是NH),但仍有时候 ORM执行时间可以通过编写良好的sproc来强制执行