c#foreach循环迭代与查询执行时间的列表
c# foreach loop iterations with list from query execution time
这只是我需要的信息。
当我使用 C# 迭代列表执行 foreach 循环时,如下所示:
foreach (var record in DbContext.UserRecords.Where(record => record.UserId == user.Id &&
record.Date.Date == startDate.AddDays(i).Date)
.ToList())
{
totHours += record.Hours;
}
每个周期究竟发生了什么?查询是否再次发生,所以我对我想要的列表中的每个项目都对数据库进行了 N 次查询,或者它只是第一次执行,然后循环保留了数据的临时副本?
我正在尝试优化我的 ASP.Net 项目中的时间,我想知道是否有 cleaner/faster 方法来迭代这些长数据流...
非常感谢!
不,您在执行查询并将数据加载到内存中的 IQueryable
上调用 ToList()
。
然后在内存中的对象上执行每次迭代。
即使没有 ToList()
查询也会执行一次,并且数据会从数据库中流出。
虽然内存效率更高,但它会在循环期间锁定底层 table,因此您需要谨慎使用该方法。
这只是我需要的信息。
当我使用 C# 迭代列表执行 foreach 循环时,如下所示:
foreach (var record in DbContext.UserRecords.Where(record => record.UserId == user.Id &&
record.Date.Date == startDate.AddDays(i).Date)
.ToList())
{
totHours += record.Hours;
}
每个周期究竟发生了什么?查询是否再次发生,所以我对我想要的列表中的每个项目都对数据库进行了 N 次查询,或者它只是第一次执行,然后循环保留了数据的临时副本? 我正在尝试优化我的 ASP.Net 项目中的时间,我想知道是否有 cleaner/faster 方法来迭代这些长数据流...
非常感谢!
不,您在执行查询并将数据加载到内存中的 IQueryable
上调用 ToList()
。
然后在内存中的对象上执行每次迭代。
即使没有 ToList()
查询也会执行一次,并且数据会从数据库中流出。
虽然内存效率更高,但它会在循环期间锁定底层 table,因此您需要谨慎使用该方法。