linq - EF core 2第一次查询慢
问题描述
我在我的项目中使用 EF core 2 作为 ORM。我在执行这个查询时遇到了这个问题:
var query = (from droitsGeo in _entities.DroitsGeos
join building in _entities.Batiments
on droitsGeo.IdPerimetre equals building.IdBatiment
where droitsGeo.IdUtilisateur == idUser &&
droitsGeo.IdClient == idClient &&
building.Valide == true &&
droitsGeo.IdNiveauPerimetre == geographicalLevel
orderby sort ascending
select new GeographicalModel
{
Id = building.IdBatiment,
IdParent = building.IdEtablissement,
Label = building.LibBatiment,
});
第一次执行大约需要 5 秒,第二次不到一秒,如下所示:
第一次执行查询:
经过时间 EF: 00:00:04.8562419
首次执行查询后:
时间流逝 EF: 00:00:00.5496862
时间流逝 EF: 00:00:00.6658079
时间流逝 EF: 00:00:00.6176030
我使用存储过程有相同的结果。
当我在 SQL Server 中执行 EF 生成的 sql 查询时,不到一秒就返回了结果。
EF Core 2 有什么问题还是我错过了配置中的某些内容?
解决方案
默认情况下,EF 会跟踪您对其运行查询的所有实体。
当你第一次运行它时,轨道改变机制就会启动......这就是为什么它需要更长的时间。
您可以避免这种情况,尤其是.AsNoTracking()
在编写查询时使用 检索集合时。
看一看:
var items = DbContext.MyDbSet
.Include(SecondObject)
.AsNoTracking()
.ToList();
推荐阅读
- maven - Maven:如何从命令行将 artifactItems 配置传递给依赖副本插件?
- objective-c - Layer-Backed NSControl 仍然调用 NSCell 绘图例程
- c - 无锁栈实现思路——目前已失效
- mysql - LEFT JOINed 表上的 MySQL COUNT 忽略未连接的记录
- python - 在脚本中调用多种类型时,GridSearchCV 挂起
- c# - 如何强制 Resharper 将花括号放在同一行?
- java - 如何在 Kotlin 中创建一个空的不可变的“类型安全”集合?
- intersystems-cache - 运行 $COMPILE 目标代码而不将其保存到全局优先
- angular - 是否可以在一次登录下组合多个 Angular 应用程序?
- typescript - 如何在 Typescript 中使用 jsdoc 类型?