实体框架查询性能慢

Posted

技术标签:

【中文标题】实体框架查询性能慢【英文标题】:Entity framework Slow query performance 【发布时间】:2018-06-12 13:00:18 【问题描述】:

我正在使用 Entity framework 6.2.0 和托管在 Azure 应用服务上的 WebAPI。

我的数据库不大,只有两个表,我有一个简单的选择查询

Account account =  Db.Accounts.Where(p => p.Code == Code && p.PersonId == 
PersonId).Include("Options").FirstOrDefaultAsync();

我正在苦苦挣扎的是,当我在 azure 上部署它时。每当我第一次调用使用上述查询的 api 时,或者当两次调用之间存在几分钟或 1 小时的显着差距时,上述过程需要很长时间才能完成。几乎 20-25 秒,下一个调用是不到一秒钟。

我已经确认,这绝对不是我的网络延迟或其他什么东西在减慢速度。

有人知道我能看到什么吗?

我的实体框架实现是数据库优先的。

【问题讨论】:

您的 Azure 应用服务是否设置为“始终开启”?如果没有,您可能会看到应用程序在每个“冷”请求时启动。如果是这种情况,进入待机时限内的后续请求应该很快,一段时间后会变慢。如果您遇到这些行为,将 Always On 设置为 true 应该可以解决问题。 如何分析它以检测原因是查询?似乎第一个查询正在做其他事情(应用程序启动、编译视图等) 这可能是由多种因素造成的。你确定这个查询是什么问题吗?不是旋转的应用程序池或与数据库完全无关的东西? 你可以写日志来检查哪个部分花费更多时间 是的,我的 appService 处于 AlwaysOn 模式。我输入的日志告诉我它只是在实际查询数据库时很慢,而不是在启动等任何其他操作上。数据库中的相同查询或使用 ssms 虽然在一秒钟内执行 【参考方案1】:

我认为这可能对你有用: 英孚热身:How to "warm-up" Entity Framework? When does it get "cold"?https://www.fusonic.net/en/blog/3-steps-for-fast-entityframework-6.1-code-first-startup-performance/

IIS 空闲超时 Fixing slow initial load for IIS

【讨论】:

以上是关于实体框架查询性能慢的主要内容,如果未能解决你的问题,请参考以下文章

实体框架 DbContext 过滤的计数查询使用变量非常慢

实体框架的大批量更新比我自己批量更新慢得多

实体框架查询性能

JSON 数组到实体框架核心非常慢?

实体框架查询性能与原始 SQL 执行不同

LINQ 查询子句的顺序是不是会影响实体框架的性能?