包含此页的版本:
不含此页的版本:
默认情况下,Unity 以增量方式执行垃圾回收。如果您想更好地控制垃圾回收的时间和方式,您可以使用以下选项:
GarbageCollector类手动控制垃圾收集器,或完全禁用它。System.GC.Collect执行完整的阻塞垃圾回收。要禁用增量垃圾回收,请执行以下作:
增量垃圾回收在大多数 Unity 项目中都很有用,尤其是在项目存在垃圾回收峰值的情况下。但是,增量垃圾回收会为更改引用的任何调用添加写入障碍,因此,如果您的项目未在性能关键部分触发垃圾回收,则可能需要禁用它。在这种情况下禁用增量垃圾回收可以提高项目中脚本代码的性能。
使用探查器验证应用程序是否按预期执行。如果您分析分析器帮助您优化游戏的窗口。它显示了在游戏的各个领域花费了多少时间。例如,它可以报告渲染、动画制作或游戏逻辑所花费的时间百分比。更多信息
请参阅术语表单独捕获,可能很难找出增量垃圾回收如何影响性能。最佳做法是分析同一性能关键部分两次:一次启用增量垃圾回收,一次禁用增量垃圾回收。然后,您可以将两个 Profiler 捕获与 Profile Analyzer 包进行比较。对于 CPU 绑定项目,每帧的差异可能高达 1 毫秒。
有关禁用垃圾回收的更多信息,请参阅垃圾回收模式。
您可以使用GarbageCollector类来手动控制垃圾收集器,或完全禁用它。您可以使用以下 API 来控制垃圾回收器:
GarbageCollector.Mode.Disabled:将 GarbageCollector.GCMode 设置为此将完全禁用垃圾回收器。用System.GC.Collect在此模式下没有效果。GarbageCollector.Mode.Manual:将 GarbageCollector.GCMode 设置为此将完全禁用垃圾收集器的自动调用,但您仍然可以使用System.GC.Collect以运行完整集合。GarbageCollector.CollectIncremental:以增量方式运行垃圾回收器。要完全禁用垃圾回收器,请将GarbageCollector.GCMode自Disabled.禁用垃圾回收器时,Unity 不会执行任何垃圾回收。叫System.GC.Collect没有效果,也不会启动集合。
禁用垃圾回收器可以防止 CPU 峰值,但应用程序的内存使用量永远不会减少,因为垃圾回收器不会收集不再具有任何引用的对象。
禁用垃圾回收器需要仔细的内存管理。如果不仔细管理内存,托管堆会不断扩展,直到应用程序内存耗尽,并且作系统会将其关闭。
理想情况下,应在禁用垃圾回收器之前分配所有内存,并避免在禁用垃圾回收器时进行额外分配。
要禁用自动垃圾回收并手动选择何时运行它,请将GarbageCollector.GCMode自Manual.
这将禁用垃圾回收器的自动调用,但仍允许您手动执行垃圾回收。手动收集可让您控制收集的时间,因此您可以微调内容的流畅度或内存使用情况。调用System.GC.Collect对于完整的阻塞集合,或GarbageCollector.CollectIncremental执行增量垃圾回收。