gpt4 book ai didi

c# - IEnumerable 在使用后是否存储对象

转载 作者:太空狗 更新时间:2023-10-29 23:15:35 25 4
gpt4 key购买 nike

如果我有一个非常大的 IEnumerable 集合,数量级为数百万个对象,那将太大而无法一次加载所有对象。集合通过 yield 方法返回:

 private static IEnumerable<MyData> ExtractModelsFromDb()
{
using (DbDataReader reader = cmd.ExecuteReader())
{
while (reader.Read())
{
Load MyData
yield return MyData;
}
reader.Close();
}
}

此数据在单个 Foreach 循环中使用:

public void RunStuff()
{
var myCollection = ExtractModelsFromDb();

foreach (var data in myCollection)
{
//DO STUFF
}
}

我知道 IEnumerable 下的集合一次加载一个对象,但是对象在 ForEach 中使用后是否会被删除或执行它们保留在集合中,直到 ForEach 完成。

最佳答案

这取决于实现。它违反 IEnumerable 的规范将值存储在它表示的序列中。事实上,一个List<T>是一个 IEnumerable<T>正是这样做的!

现在,对于 IEnumerable 拥有的,它将不会在返回对象后存储它们。 DbDataReader我们只是将结果流式传输给您,并且 yield return荷兰国际集团不会存储它们。所以,你的 foreach正在流式传输来自 DbDataReader 的结果集,没有人像你一样存储它们 go gently down the stream .

关于c# - IEnumerable 在使用后是否存储对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17871727/

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