IEnumerator是否需要比数组更多的资源?

时间:2013-04-29 13:05:21

标签: c# arrays mono unity3d ienumerator

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

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

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

2 个答案:

答案 0 :(得分:1)

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

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

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

答案 1 :(得分:0)

首先,只需创建大数组并将其保存在内存中。应用程序的其余部分可以检索对该数组的引用并通过它进行迭代。

使用for时,使用foreach的最佳方法和最快速度。

如果你正在使用{{1}},evertime(在水下)创建一个枚举器类,需要在它完成任务后进行清理。