Version: Unity 6.0 (6000.0)
语言 : 中文
增量垃圾收集
Tracking garbage collection allocations

禁用垃圾收集

可以使用 GarbageCollector.GCMode 在运行时禁用垃圾收集。因为垃圾收集器不会收集不再有任何引用的对象,所以这样可以防止出现 CPU 尖峰,但应用程序的内存使用量完全不会减少。

警告:禁用垃圾收集器需要谨慎进行内存管理。如果未谨慎管理内存,托管堆将不断扩展,直到应用程序内存耗尽,然后操作系统将其关闭。

可以使用以下 API 来微调对自动垃圾收集器的控制:

  • System.GC.Collect:执行完整的阻塞性垃圾收集。
  • GarbageCollector.Mode.Disabled:完全禁用垃圾收集器。在此模式下使用 System.Gc.Collect 没有影响。
  • GarbageCollector.Mode.Manual:禁用垃圾收集器的自动调用,但仍可以使用 System.GC.Collect 运行完整收集。
  • GarbageCollection.CollectIncremental:以增量方式运行垃圾收集器。

仅当能够计算和控制分配所需的内存量时,才应在应用程序中短暂、性能关键的部分禁用垃圾收集。之后应立即启用垃圾收集器,并经常对项目进行性能分析,以确保不会触发额外的托管分配,从而导致托管堆变得过大。

禁用垃圾收集器时,不会停止应用程序以执行垃圾收集。调用 System.GC.Collect 没有影响,并且不会启动收集。为避免一段时间后内存使用量增加,务必在管理内存时慎重操作。理想情况下,在禁用垃圾收集器之前应分配所有内存,并在禁用垃圾收集器时避免进行其他分配。

建议仅禁用垃圾收集器来实现长效分配。例如,您可能希望在加载游戏关卡之前为其分配所有所需的内存,然后禁用垃圾收集器以避免关卡期间的性能开销。完成关卡并释放所有内存后,可以再次启用垃圾收集器,并在加载下一个关卡之前使用 System.GC.Collect 回收内存。

有关如何在运行时启用和禁用垃圾收集的更多详细信息,请参阅 GarbageCollector 脚本 API 页面。

增量垃圾收集
Tracking garbage collection allocations