为什么实体框架中的AsNoTracking()会降低我的表现?

时间:2014-09-06 20:50:57

标签: performance entity-framework

我使用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();

1 个答案:

答案 0 :(得分:0)

AsNoTracking方法链接到查询时,不会跟踪该查询产生的对象。

由于您没有缓存查询结果,因此每次执行查询时,Entity Framework都需要实现查询结果。通常,在启用更改跟踪的情况下,如果查询结果已经缓存在上下文对象中,则实体框架不需要重新实现查询结果。

上下文对象包含Terminal,因为您的查询明确包含了这些内容。然后转换为List,这会使您的查询更糟糕。