Unity3D:禁用垃圾回收

推荐:将NSDT场景编辑器加入你的3D工具链
3D工具集:NSDT简石数字孪生

禁用垃圾回收

您可以使用 垃圾收集器.GCMode 在运行时禁用垃圾回收。这可以防止 CPU 峰值,但应用程序的内存使用量永远不会减少,因为垃圾回收器不会收集不再具有任何引用的对象。

警告:禁用垃圾回收器需要仔细的内存管理。如果不仔细管理内存,托管堆会不断扩展,直到应用程序内存不足,操作系统将其关闭。

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

  • System.GC.Collect:执行完整的阻止垃圾回收。
  • 垃圾回收器.模式.禁用:完全禁用垃圾回收器。在此模式下使用不起作用。System.Gc.Collect
  • 垃圾回收器.模式.手动:禁用垃圾回收器的自动调用,但您仍然可以用于运行完整收集。System.GC.Collect
  • GarbageCollection.CollectIncremental:以增量方式运行垃圾回收器。

只有在能够计算和控制需要分配的内存量时,才应在应用程序的简短性能关键部分禁用垃圾回收。之后应立即启用垃圾回收器,并经常分析项目,以确保不会触发可能导致托管堆变得太大的额外托管分配。

禁用垃圾回收器时,它不会停止应用程序执行垃圾回收。调用不起作用,也不会启动集合。为避免内存使用量随时间推移而增加,在管理内存时必须小心。理想情况下,应在禁用垃圾回收器之前分配所有内存,并避免在禁用垃圾回收器时进行其他分配。System.GC.Collect

最佳做法是仅禁用长期分配的垃圾回收器。例如,您可能希望在游戏加载之前为游戏的某个关卡分配所有必需的内存,然后禁用垃圾回收器以避免关卡期间的性能开销。完成关卡并释放所有内存后,您可以再次启用垃圾回收器,并在加载下一个关卡之前用于回收内存。System.GC.Collect

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

此文由3D建模学习工作室整理翻译,转载请注明出处!

上一篇:Unity3D:增量垃圾回收 (mvrlink.com)

下一篇:Unity3D:垃圾回收最佳做法 (mvrlink.com)

NSDT场景编辑器 | NSDT 数字孪生 | GLTF在线编辑器 | 3D模型在线转换 | UnrealSynth虚幻合成数据生成器 | 3D模型自动纹理化工具
2023 power by nsdt©鄂ICP备2023000829号