我需要数据库中未编辑的项目列表。 它运行缓慢,所以我试图降低速度。
所以我将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()应该运行得更快,并且是只读列表的理想选择。 该表也有两个子表。
答案 0 :(得分:0)
第一次运行查询时,必须对其进行编译。如果实体是 已被上下文跟踪,则跟踪查询将返回 这些实例,而不是创建新实例。
这就是为什么使用AsNoTracking()跟踪实体执行得更快的原因。
https://github.com/aspnet/EntityFrameworkCore/issues/14366
但是执行时间大约为7秒,表示没有跟踪/没有跟踪。它解决了数据库问题(例如,未建立索引的列),如果数据设置正确,则30毫升的记录大约有15亿条记录,而秒数则不会。