LINQ to Entities Perf优化

问题描述 投票:0回答:1

我遇到了EF的一些性能问题,并且想知道......好吧......为什么。

我正在运行的查询只是:

var procs = ctx.Procedures
    .Include(p => p.ProcedureProcedureFields.Select(ppf => ppf.ProcedureField))
    .Where(p => p.IsActive)
    .Where(p => !p.ProcedureLogbookTypes1.Any()).ToList();

所以,甚至没有传递任何参数,这排除了问题。如果我从SQL事件探查器中获取SQL并直接在SSMS中运行它,则需要不到1秒。

EF调用大约需要12秒才能填充procs变量。

还有一些事情。

我没有在EF之后运行sql进行比较。我已经确定缓存中没有计划。事实上,我已经做到了。我计划在缓存中时运行SQL,何时不运行SQL。运行2件事的任何和所有组合都会产生相同的结果。原始SQL只是EF查询时间的一小部分。

我全都使用存储过程,其中查询非常复杂,并且性能需要自定义SQL。

但上面的查询很简单。生成的SQL很简单。

我宁愿不用一百万个小存储过程来丢弃我的数据库,只是因为我无法弄清楚如何使EF执行。

有没有办法加快速度?

谢谢

entity-framework entity-framework-6
1个回答
1
投票

您可以使用AsNoTracking(来自this answer)描述的this article

实体框架提供了许多性能调优选项,可帮助您优化应用程序的性能。其中一个调整选项是.AsNoTracking()。此优化允许您告知实体框架不跟踪查询的结果。这意味着实体框架不会执行查询返回的实体的其他处理或存储。但是,这也意味着如果不将这些实体重新连接到跟踪图,则无法更新这些实体。

© www.soinside.com 2019 - 2024. All rights reserved.