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建模学习工作室整理翻译,转载请注明出处!