我需要一个来自我的数据库的未编辑项目列表。
它运行得很慢,所以我试图增加一些速度。
因此,我在LINQ查询中添加了AsNoTracking,但运行速度更慢了!
以下代码平均需要7.43秒。 AsNoTracking是在Where之后。
var result = await _context.SalesOrderItems.Where(x => x.SalesOrderId == SalesOrderId ).AsNoTracking().ToListAsync();
以下代码平均需要8.62秒。AsNoTracking位于Where之前。
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()应该更快,并且非常适合只读列表。 此外,此表有两个子表。
AsNoTracking
的位置不应该有影响。是否涉及到延迟加载?如果没有跟踪,由于 EF 无法重用先前获取的实体,这可能需要更多时间。 - Gert Arnoldresult
时,它们实际上是否加载?你看到哪些查询在运行? - Gert Arnold