Xap*_*ann 4 c# sql-server entity-framework
迭代具有大量记录的表的正确方法是什么?我需要评估表中的所有记录。我正在使用实体框架连接 MS SQL 数据库并从中获取信息。我使用的是一个简单的foreach循环;
foreach (var x in MyEntity.MyTable)
{
//logic process
}
Run Code Online (Sandbox Code Playgroud)
这非常适合少于 500,000 条记录的表(没有确切的数字)。问题是当它遇到更大的表(例如超过 800,000 条记录)时,应用程序会变得不稳定并会崩溃。我应该注意到该应用程序使用大量 RAM(大约 4-6GB)
foreach (var x in MyEntity.MyTable.AsNoTracking())
Run Code Online (Sandbox Code Playgroud)
这将确保在迭代表中的每个项目时,EF 不会跟踪它,并且不会保留在表中,DbContext因此必要时 CLR 可以对实例进行 GC。
请注意,这意味着您无法对项目进行任何更改并希望将这些更改保留回 DbContext,您必须附加实例才能执行此操作。
这确实假设您未显示的代码中不存在消耗大量内存的其他问题。
| 归档时间: |
|
| 查看次数: |
2369 次 |
| 最近记录: |