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



遍历包含大量记录的表的正确方法是什么? 我需要评估表格中的任何记录。 我正在使用实体框架连接并从 MS SQL 数据库中获取信息。 我正在使用一个简单的foreach循环;

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

这非常适合少于 500,000 条记录的表(没有确切的数字)。 问题是当它遇到更大的表(例如 800,000 多条记录)时,应用程序变得不稳定并会崩溃。 我应该注意该应用程序正在使用大量RAM(约4-6GB)

使用 AsNoTracking

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

这将确保在迭代表中的每个项目时,EF 不会跟踪它,并且不会停留在DbContext以便在必要时可以由 CLR 对实例进行 GC。

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


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

最新更新