ienumerator比Arrays需要更多的资源吗?

本文关键字:资源 Arrays ienumerator | 更新日期: 2023-09-27 18:11:25

我有一个Sutherland-Hodgman算法的实现,因此我需要经常返回数组。我正在使用Unity,所以答案至少需要适用于Mono运行时。

我想知道是否最好返回普通数组,或者如果我可以作为IEnumerator返回,以减少垃圾收集之间的时间。到目前为止,我一直在返回数组,但我真的想要丢失对GC.Collect()的调用。

我猜垃圾收集器也需要收集IEnumerators,并且可能有一些开销相关?

ienumerator比Arrays需要更多的资源吗?

使用生成器协同例程(具有多个yield return的函数)时,不会创建或分配数组。一切都以流媒体的方式完成。完全有可能有无限个生成器工作而不会出现内存不足错误:

public static IEnumerable<int> Odds(){
  for (int i = 1 ; ; i += 2)
    yield return i;
}

因此,如果您经常返回大数组,只是为了立即迭代和处理,那么好处将是巨大的,因为内存分配将小得多。垃圾回收器被调用的次数会更少,需要做的工作也会更少。

首先,创建大数组并将其保存在内存中的某个位置。应用程序的其余部分可以检索对该数组的引用并遍历该数组。

迭代数组的最好和最快的方法是使用for

如果你使用的是foreach,每次(在水下)一个枚举器类被创建,它将需要在它完成它的职责后清理。