c# - Entity Framework 查询outofmemoryexception

标签 c# .net entity-framework-4 linq-to-entities

我是 .NET Entity Framework 的新手,正在尝试遍历具有几百万行的表中的记录。这是基本代码:

// select the records from the database
var records = from data in dataContext.Messages
                select data;

// iterate over the messages
foreach (var record in records)
{
    // do nothing
}

在遍历数据时,我得到了“outofmemoryexception”。有什么方法可以改变我的查询或管理 ObjectQuery 实例的内存吗?

最佳答案

我怀疑问题是 Entity Framework 试图在您的对象上下文中缓存/跟踪所有这些数据,如果数据集很大,这最终会导致 OutOfMemory 异常。

您可以手动关闭跟踪以避免这种情况:

dataContext.Messages.MergeOption = System.Data.Objects.MergeOption.NoTracking;

您当前看到的分配的内存在数据上下文中 - 一旦您处理上下文,此内存最终将被垃圾收集,因此您可以在 using block 内具体化较小的行批处理或手动将对象上下文处理为回收每批之间的内存。

关于c# - Entity Framework 查询outofmemoryexception,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6836152/

相关文章:

c# - 检索树结构的所有排列的有效方法

c# - 使用 response.redirect(somepage,true) 时 Page_Unload 未触发

c# - 隐式创建位于依赖 dll 中的类的实例

.net - 使用 Clickonce 部署 Microsoft.Bcl.Async

.net - 在部分信任环境中测试 .NET 代码

c# - 使用 EF4(edmx 模型)时偶尔出现 "The underlying provider failed on Open"错误

entity-framework - Entity Framework CTP5 代码优先映射 - 同一个表中的外键

c# - 如何在 C# 中声明可选类型?

c# - 如何使 LINQ 到多个表

entity-framework-4 - Entity Framework 不会将外键值更新为null