使用大量记录迭代表的正确方法是什么?我需要评估表中的记录。我正在使用Entity Framework连接并从MS SQL数据库获取信息。我使用的是简单的foreach
循环;
foreach (var x in MyEntity.MyTable)
{
//logic process
}
这适用于少于500,000条记录的表格(不具备确切的数字)。问题是当它遇到更大的表时说800,000加上记录应用程序变得不稳定并且会崩溃。我应该注意到应用程序使用了大量的RAM(大约4-6GB)
答案 0 :(得分:3)
foreach (var x in MyEntity.MyTable.AsNoTracking())
这将确保当表格中的每个项目被迭代时,它不会被EF跟踪,也不会在DbContext
中保留,因此必要时CLR可以对GC进行实例化。
请注意,这意味着您无法对项目进行任何更改,并希望将这些更改保留回DbContext,您必须附加实例才能执行此操作。
这假设您没有显示的代码中没有其他问题消耗大量内存。