在 C# 中使用大量迭代器对内存使用有何影响?让我们假设一个程序执行数千个 foreach
循环——每个循环是否通过调用 GetEnumerator
在堆上分配一个临时对象? CLR 是否执行任何类型的优化(例如 IEnumerator
对象的堆栈分配)?或者这根本不是一个值得担心的重要问题?
最佳答案
在大多数情况下,它根本不够重要,无需担心。正如 Eric 指出的那样,可能有一些情况很重要,但根据我的经验,这种情况很少见。
如果您要执行数十万次 foreach
循环,大概你在这些循环中做实际的工作。这几乎肯定比迭代器本身远重要。
请注意,使用 foreach
在一个数组上(在编译时已知是一个数组,也就是说)不使用 IEnumerable<T>
无论如何-它使用直接索引。不过,我不会基于此更改我的代码。
与以往一样,如果您关心性能,则需要对其进行测量和分析。瓶颈几乎永远不会出现在您预期的位置。
关于c# - C#中迭代器的内存使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1315767/