ienumerator比Arrays需要更多的资源吗?
本文关键字:资源 Arrays ienumerator | 更新日期: 2023-09-27 18:11:25
我有一个Sutherland-Hodgman算法的实现,因此我需要经常返回数组。我正在使用Unity,所以答案至少需要适用于Mono运行时。
我想知道是否最好返回普通数组,或者如果我可以作为IEnumerator返回,以减少垃圾收集之间的时间。到目前为止,我一直在返回数组,但我真的想要丢失对GC.Collect()的调用。
我猜垃圾收集器也需要收集IEnumerators,并且可能有一些开销相关?
使用生成器协同例程(具有多个yield return
的函数)时,不会创建或分配数组。一切都以流媒体的方式完成。完全有可能有无限个生成器工作而不会出现内存不足错误:
public static IEnumerable<int> Odds(){
for (int i = 1 ; ; i += 2)
yield return i;
}
因此,如果您经常返回大数组,只是为了立即迭代和处理,那么好处将是巨大的,因为内存分配将小得多。垃圾回收器被调用的次数会更少,需要做的工作也会更少。
首先,创建大数组并将其保存在内存中的某个位置。应用程序的其余部分可以检索对该数组的引用并遍历该数组。
迭代数组的最好和最快的方法是使用for
。
如果你使用的是foreach
,每次(在水下)一个枚举器类被创建,它将需要在它完成它的职责后清理。