gpt4 book ai didi

c# - List 是否在 foreach 的 C# 中创建垃圾

转载 作者:太空狗 更新时间:2023-10-29 23:54:09 26 4
gpt4 key购买 nike

如果我错了请更正我,但是在执行 foreach 和 IEnumerable<T> 时无论 T 是什么,都会产生垃圾。但我想知道你是否有 List<T>其中 T 是实体。然后说列表中有一个派生类,如 Entity2D。它是否必须为每个派生类创建一个新的枚举器?因此制造垃圾?

也有一个接口(interface)让我们说 IEntity因为 T 制造垃圾?

最佳答案

List<T>的 GetEnumerator 方法实际上非常有效。

当你遍历 List<T> 的元素时,它调用 GetEnumerator。反过来,这会生成内部 struct它包含对原始列表的引用、索引和版本 ID 以跟踪列表中的更改。

但是,由于正在使用一个结构,它实际上并没有产生 GC 将要处理的“垃圾”。


至于“为每个派生类创建一个新的枚举器”——.NET 泛型的工作方式与 C++ 模板不同。在 .NET 中,List<T>类(及其内部 Enumerator<T> 结构)被定义一次,可用于任何 T。使用时,需要该特定类型 T 的通用类型,但这只是类型信息对于那个新创建的类型,一般来说很小。这不同于 C++ 模板,例如,其中使用的每种类型都是在编译时创建的,并且“内置”到可执行文件中。

在 .NET 中,可执行文件指定了 List<T> 的定义, 不是 List<int> , List<Entity2D>等等……

关于c# - List<T> 是否在 foreach 的 C# 中创建垃圾,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3259130/

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