实体框架4与实体框架3.5的性能如何?

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


简短的回答是现在说得太早。 .Net人几乎完全关注性能,直到4月12日发布的版本才能最终确定和本地化。 另外,更快的意思是什么? 更快速的可以通过多种方式查看,例如:

  • 实体框架4.0具有新功能,单独的对象跟踪改进可能意味着巨大的胜利,因为您自己没有在做这项手动工作......至少在任何情况下,开发速度都会更快。
  • 如果之前根本没有任何功能,那么POCO支持的轻量级对象也可能意味着在处理大量对象时移动的内存也会减少很多。 无论从数据库中获取额外属性的成本有多少,在实例化和跟踪它们(加载时间和内存消耗)方面都存在成本。
  • 在你的具体情况下,除了一个非常复杂或高容量的查询之外,对于任何事情来说,半秒钟是很长的时间......你看看数据库花了多少时间以及花了多少时间.Net拥有数据? 如果你将大部分时间花在SQL以外,那么是的,在Net 4.0中反思的基本改进应该会为你提供一些速度提升......但是如果你花时间在SQL中,它并没有多大的帮助在所有。 大部分性能问题可能是生成的SQL索引,而非Entity Framework水合性能。

    我会按照凯恩的评论,看看它生成查询的SQL,才有可能为您发布此,那就是快速的存储过程,所以我们也许可以找到问题所在?


    从ADO.NET博客:

    定制查询 - 增加对现有LINQ操作符的支持,通过LINQ识别更多的模式,编写模型定义的函数以及在LINQ中使用这些函数的能力,以及许多其他创建和定制查询的方法。

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

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

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

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


    说到真正复杂的查询,我还没有看到任何证据表明任何L2S,NH或EF都可以生成比我在sproc中更好的查询计划。 我喜欢ORM(尤其是NH),但是仍然有很多时候ORM的执行时间可以通过一个写得很好的sproc来实现

    链接地址: http://www.djcxy.com/p/44145.html

    上一篇: How is the performance of entity framework 4 vs entity framework 3.5?

    下一篇: How to set text on status bar?