首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >实体框架性能优化

实体框架性能优化
EN

Stack Overflow用户
提问于 2014-03-13 19:52:02
回答 3查看 2.8K关注 0票数 0

我们使用实体框架查询SQL服务器数据库。LINQ表达式是IQueryable。这个查询大约需要10秒才能执行。如果这是在存储过程中,我会使用查询来提高效率。但是,如果我使用的是IQueryable,实体框架本身是否决定如何构建高效的查询,还是必须使用linq表达式并通过反复尝试来提高性能?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2014-03-13 20:43:53

实体框架本身是否决定如何构建高效的查询?

EF总是自动决定如何构建查询,而sql -server也会自动优化查询。

我是否必须使用linq表达式并通过尝试和错误来提高性能?

您可以尝试使用查询,但通常情况下,轻微的更改不会影响性能(就表达式的顺序而言)。

您可以始终使用SQL事件探查器查看EF所做的事情,并查看查询的效率。如果需要很长时间,可以在SSMS中重新运行查询,打开包括实际执行计划并确定查询速度慢的地方。

票数 0
EN

Stack Overflow用户

发布于 2014-03-13 20:39:20

作为数据库开发人员而不是C#开发人员,并且对实体框架细节的了解非常有限,我可以这样说:

我的理解是,实体框架决定了如何构建查询,可能无法很好地理解效率。在Linq查询或Lambda表达式中,可能有一些事情可以做得更好或更糟,但在大多数情况下,您可能无法真正调整查询。这是使用ORM的一个主要缺点,至少从DBA的角度来看,DBA在半夜时会被寻呼,当服务器爬行到停顿时,他们不能做任何事情来修复查询,而且您不能总是添加索引;-)。

我还可以说,您在实体框架中确实有选项为每个DML操作指定一个存储过程,这样如果您确实需要对这个特定的查询做更好的事情,那么就为这个操作创建一个存储过程,并将EF对象指向它以进行SELECT,但允许EF构建INSERT / UPDATE DELETE查询。

这有用吗?

票数 1
EN

Stack Overflow用户

发布于 2014-03-13 20:32:03

如果您使用的是EF 6,您可以很容易地启用日志记录。然后,您可以检查每个调用正在做什么。我会从那里开始。MSDN EF6测井

您能分享更多关于查询和结果大小的信息吗?

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22389444

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档