我的页面上有一个查询,使用EF 3.5执行至少需要半秒钟。当我使用存储过程时,速度明显加快。这是一个非常复杂的查询。即将到来的EF 4.0会有任何性能改进吗? EF 4.0真的击败了3.5性能吗?
答案 0 :(得分:3)
简短的回答是说现在还为时过早。 .Net的人几乎完全专注于性能,直到4月12日的发布必须最终确定和本地化。还有什么意思更快?可以通过多种方式查看更快,例如:
在您的特定情况下,对于除了非常复杂或高容量的查询之外的任何事情,半秒是长时间...您是否看过在数据库中花费了多少时间以及如何花了很多时间.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来强制执行。