我有Sutherland-Hodgman算法的实现,所以我需要经常返回数组。我正在使用Unity,因此答案至少需要应用于Mono运行时。
我想知道如果最好返回普通数组,或者我可以作为IEnumerator返回,以减少垃圾收集之间的时间。到目前为止,我一直在返回数组,但我真的想放弃对GC.Collect()的调用。
我想垃圾收集器也需要收集IEnumerators,并且可能还有一些相关的开销?
答案 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(在水下)创建一个枚举器类,需要在它完成任务后进行清理。