c# - 如何减少 EF5 中大型数据集的内存占用?

标签 c# entity-framework-5

我正在尝试从 SQL Server 中提取一个大型数据集(140 万条记录)并转储到 WinForms 应用程序中的文件中。我试图通过分页来做到这一点,这样我就不会一次在内存中持有太多,但是这个过程在运行时会继续增加它的内存占用。通过大约 25%,它占用了 600,000K。我在做分页错误吗?我能否就如何防止内存使用量增长如此之快获得一些建议?

var query = (from organizations in ctxObj.Organizations
                 where organizations.org_type_cd == 1
                 orderby organizations.org_ID
                 select organizations);
int recordCount = query.Count();
int skipTo = 0;
int take = 1000;
if (recordCount > 0)
{
    while (skipTo < recordCount)
    {
        if (skipTo + take > recordCount) 
            take = recordCount - skipTo;

        foreach (Organization o in query.Skip(skipTo).Take(take))
        {
            writeRecord(o);
        }
        skipTo += take;
    }
}

最佳答案

对象上下文将保留在内存中的对象上,直到它被释放。我建议在每批之后处理上下文,以防止内存占用量继续增长。

您还可以使用 AsNoTracking() ( http://msdn.microsoft.com/en-us/library/gg679352(v=vs.103).aspx ),因为您没有保存回数据库。

关于c# - 如何减少 EF5 中大型数据集的内存占用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19817561/

相关文章:

asp.net-mvc - 域模型: how and where的验证

c# - ASP.Net MVC 5 Entity Framework 选择在哪里?

c# - 在 C# 中是否有比较多个属性的快捷方式?

c# - Ninject:如何在 "ashx"文件中不使用 Ninject 并且仍然没有得到异常?

c# - 在什么情况下我需要 Entity Framework 中的外键和导航属性

c# - 使用最小起订量模拟 EF DbContext

entity-framework - 无法确定关系的主体端 - 多个添加的实体可能具有相同的主键

c# - 在 Blazor Web 程序集中 token 过期时间自动注销

c# - NUnit:检查两个字典是否相同的 API

c# - 限制引用实体的 NHibernate 查询