LINQ AsNoTracking运行缓慢

时间:2019-06-07 10:30:42

标签: performance entity-framework linq

我需要数据库中未编辑的项目列表。 它运行缓慢,所以我试图降低速度。

所以我将AsNoTracking添加到LINQ查询中,并且运行速度较慢!

以下代码平均花费7.43秒。 AsNoTracking在位置

之后
var result = await _context.SalesOrderItems.Where(x => x.SalesOrderId == SalesOrderId ).AsNoTracking().ToListAsync();

以下代码平均花费8.62秒。 AsNoTracking位于之前位置

var result = await _context.SalesOrderItems.AsNoTracking().Where(x => x.SalesOrderId == SalesOrderId ).ToListAsync();

以下代码平均花费6.95秒。这不是AsNoTracking

var result = await _context.SalesOrderItems.Where(x => x.SalesOrderId == SalesOrderId ).ToListAsync();

那么我想念什么吗?我总是尽管AsNoTracking()应该运行得更快,并且是只读列表的理想选择。 该表也有两个子表。

1 个答案:

答案 0 :(得分:0)

  

第一次运行查询时,必须对其进行编译。如果实体是   已被上下文跟踪,则跟踪查询将返回   这些实例,而不是创建新实例。

这就是为什么使用AsNoTracking()跟踪实体执行得更快的原因。

https://github.com/aspnet/EntityFrameworkCore/issues/14366

但是执行时间大约为7秒,表示没有跟踪/没有跟踪。它解决了数据库问题(例如,未建立索引的列),如果数据设置正确,则30毫升的记录大约有15亿条记录,而秒数则不会。