gpt4 book ai didi

c# - Entity Framework 如何遍历一个太大的集合?

转载 作者:太空狗 更新时间:2023-10-30 01:22:46 36 4
gpt4 key购买 nike

我是 Entity Framework 的新手。

我有一个担心:

我需要遍历通过 LINQ to Entities 收集的大量数据,这些数据以匿名类型组合了来自不同实体的几个属性。

如果我需要一个一个地读取这个查询的返回项直到结束,我是否有 OutOfMemory 异常的风险,因为集合很大或 EF 隐式使用 SqlDataReader?

(或者我应该使用 EntityDateReader 来确保我按顺序读取 Db(但我想我必须将查询生成为字符串))

最佳答案

在我看来,您可以做两件事,首先使用 .AsNoTracking 关闭跟踪,这在大多数情况下会将您的内存集减半,这可能就足够了。

如果您的结果集仍然太大,请使用 skip and take 以 block 的形式提取结果集。您还应该将其与 AsNoTracking 结合使用,以确保跟踪不会消耗内存

编辑:

例如,您可以使用类似下面的内容来循环遍历 1000 个 block 中的所有项目。下面的代码一次只能在内存中保存 1000 个项目。

int numberOfItems = ctx.MySet.Count();

for(int i = 0; i < numberOfItems + 1000; i+=1000)
{
foreach(var item in ctx.MySet.AsNoTracking().Skip(i).Take(1000).AsEnumerable())
{
//do stuff with your entity
}
}

关于c# - Entity Framework 如何遍历一个太大的集合?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12853169/

36 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com