我使用mvc5和Entity Framework 6.i使用AsNoTracking()来提高我的性能,但这会降低我的速度。在我没有AsNoTracking()的情况下,速度大约是3s但是AsNoTracking()的速度大约是14s。测试我将AutoDetectChangesEnabled设置为false,但这也无法帮助我提高速度。
db.Configuration.AutoDetectChangesEnabled =false;
db.Employees.AsNoTracking().Include(e => e.Terminal).Where(-----).toList();
答案 0 :(得分:0)
将AsNoTracking
方法链接到查询时,不会跟踪该查询产生的对象。
由于您没有缓存查询结果,因此每次执行查询时,Entity Framework都需要实现查询结果。通常,在启用更改跟踪的情况下,如果查询结果已经缓存在上下文对象中,则实体框架不需要重新实现查询结果。
上下文对象包含Terminal
,因为您的查询明确包含了这些内容。然后转换为List,这会使您的查询更糟糕。