1

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

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

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

4

2 回答 2

1

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

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

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

于 2013-04-29T13:21:36.837 回答
0

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

遍历数组的最佳方式和最快方式是使用for.

如果您正在使用foreach,则每次(在水下)都会创建一个枚举器类,在它完成任务后需要对其进行清理。

于 2013-04-29T13:24:48.867 回答