Performance 为什么实体框架中的AsNoTracking()会降低我的性能?

Performance 为什么实体框架中的AsNoTracking()会降低我的性能?,performance,entity-framework,Performance,Entity Framework,我使用mvc5和实体框架6。我使用AsNoTracking()来提高性能,但这会降低我的速度。在我的情况下,没有AsNoTracking()的速度约为3s,但使用AsNoTracking()的速度约为14s。此外,为了进行更多测试,我将AutoDetectChangesEnabled设置为false,但这也不能帮助我提高速度 db.Configuration.AutoDetectChangesEnabled =false; db.Employees.AsNoTracking().Include(

我使用mvc5和实体框架6。我使用AsNoTracking()来提高性能,但这会降低我的速度。在我的情况下,没有AsNoTracking()的速度约为3s,但使用AsNoTracking()的速度约为14s。此外,为了进行更多测试,我将AutoDetectChangesEnabled设置为false,但这也不能帮助我提高速度

db.Configuration.AutoDetectChangesEnabled =false;
db.Employees.AsNoTracking().Include(e => e.Terminal).Where(-----).toList();

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

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


上下文对象包括
终端
,因为您的查询明确包括这些。然后将其转换为列表,这会使您的查询更加糟糕。

请发布您的代码。我怀疑您可能正在测试冷(即非缓存)查询,而不是热(缓存)查询。我删除了Include(e=>e.Terminal),为了便于测试,我有以下代码:db.Employees.AsNoTracking().toList();但性能还不可接受。我认为本示例中的AsNoTracking()应该可以提高性能,但这并没有实现。那么,我认为瓶颈不在AsNoTracking()上。你们有where子句吗?