Optimization Unity3D:优化垃圾收集

Optimization Unity3D:优化垃圾收集,optimization,memory-management,garbage-collection,unity3d,Optimization,Memory Management,Garbage Collection,Unity3d,Unity3D给了我很多关于垃圾收集的提示。在下面的屏幕截图中,三个红色的尖刺代表了我在游戏中的三个暂停。每个暂停时间都超过100毫秒,大部分时间都花在TrackDependencies上 根据,我尝试将以下内容添加到我的代码中: if (Time.frameCount % 30 == 0) { System.GC.Collect(); } 这没用。我仍然有尖峰,他们仍然需要100+毫秒。到底是怎么回事,我可以做什么来优化我的游戏 附言: 我在游戏中动态地创建和销毁大量的GameObj

Unity3D给了我很多关于垃圾收集的提示。在下面的屏幕截图中,三个红色的尖刺代表了我在游戏中的三个暂停。每个暂停时间都超过100毫秒,大部分时间都花在
TrackDependencies

根据,我尝试将以下内容添加到我的代码中:

if (Time.frameCount % 30 == 0)
{
    System.GC.Collect();
}
这没用。我仍然有尖峰,他们仍然需要100+毫秒。到底是怎么回事,我可以做什么来优化我的游戏

附言:

我在游戏中动态地创建和销毁大量的
GameObject
s。这可能是个问题吗

我在循环或数组中没有字符串连接作为返回值,正如在中所述

这没用。我仍然有刺,他们仍然需要100+毫秒。什么 到底是怎么回事,我能做些什么来优化我的游戏

使用
System.GC.Collect
只需强制垃圾收集。如果在上次收集时分配了大量要释放的内存,则无法避免出现峰值。这只在试图随着时间的推移分发垃圾回收时有用,以避免大规模的释放

我在游戏中动态地创建和销毁很多游戏对象 游戏这可能是个问题吗

也许这就是问题所在

一些提示:

  • 在应用程序开始时,尝试分配(
    LoadResource
    实例化
    )尽可能多的资源。如果所需内存不太多,您可以简单地实例化所需的所有资源,并根据需要禁用/启用它们。如果资源内存需求巨大,这是无法实现的
  • 避免对
    实例化
    销毁
    的ingame调用。创建一个对象池,当应用程序启动时,在其中实例化一组资源。启用所需的资源,并禁用所有其他资源。不要销毁对象,而是将其释放到池中,以便可以根据需要禁用和重新启用它
  • 避免对
    资源进行ingame调用。卸载未使用的资产。这只会增加实例化新资源所需的时间(如果您以前发布过它)。优化内存使用是很有用的,但每隔一段时间或每次销毁对象时调用它是没有意义的

您是否在代码中的某个地方销毁对象?如果可能,将您的对象集中起来以避免过度销毁可能是一个很好的解决方案。@Heisenbug是的,我在游戏中动态创建和销毁了很多对象。在destroy对象函数中,我还调用了
Resources.UnloadUnusedAssets()