这是我需要的信息。
当我执行foreach循环时,用c#遍历一个列表,如下所示:
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项目中优化时间,我想知道是否有一种更干净/更快的方法来迭代这些长数据流。。。
谢谢!
1条答案
按热度按时间vd2z7a6w1#
不,你打给我
ToList()
上IQueryable
它执行查询并将数据加载到内存中。然后对内存中的对象执行每个迭代。
即使没有
ToList()
查询将执行一次,数据从数据库流出来。虽然内存效率更高,但它在循环期间对底层表保持一个锁,因此您需要对这种方法非常熟悉。