实体框架在表上超过800,000条记录

时间:2017-10-31 21:01:45

标签: c# sql-server entity-framework

使用大量记录迭代表的正确方法是什么?我需要评估表中的记录。我正在使用Entity Framework连接并从MS SQL数据库获取信息。我使用的是简单的foreach循环;

foreach (var x in MyEntity.MyTable)
{
   //logic process
}

这适用于少于500,000条记录的表格(不具备确切的数字)。问题是当它遇到更大的表时说800,000加上记录应用程序变得不稳定并且会崩溃。我应该注意到应用程序使用了大量的RAM(大约4-6GB)

1 个答案:

答案 0 :(得分:3)

使用AsNoTracking

foreach (var x in MyEntity.MyTable.AsNoTracking())

这将确保当表格中的每个项目被迭代时,它不会被EF跟踪,也不会在DbContext中保留,因此必要时CLR可以对GC进行实例化。

请注意,这意味着您无法对项目进行任何更改,并希望将这些更改保留回DbContext,您必须附加实例才能执行此操作。

这假设您没有显示的代码中没有其他问题消耗大量内存。