Zen*_* Qu 12 optimization garbage-collection memory-management unity-game-engine
Unity3D Profiler为我提供了主要关于垃圾收集的峰值.在下面的截图中,三个红色尖峰代表我在游戏中的三个档位.这些摊位中的每一个都是100 + ms,大部分时间都花在了上面TrackDependencies.
根据Unity指令,我尝试将其添加到我的代码中:
if (Time.frameCount % 30 == 0)
{
System.GC.Collect();
}
Run Code Online (Sandbox Code Playgroud)
这没有用.我仍然有尖峰,他们仍然需要100 + ms.到底发生了什么,我该怎么做才能优化我的游戏?
PS:
我GameObject在游戏中动态创建并摧毁了很多s.这可能是个问题吗?
我在循环或数组中没有字符串连接作为返回值,如帖子中所述.

Hei*_*bug 13
这没有用.我仍然有尖峰,他们仍然需要100 + ms.到底发生了什么,我该怎么做才能优化我的游戏?
随着System.GC.Collect你只是强制垃圾收集.如果你已经从最后一次收集中分配了大量内存,那么你就无法避免尖峰.这仅用于尝试随时间分布垃圾收集,避免大量释放.
我在我的游戏中动态创建和销毁了很多GameObjects.这可能是个问题吗?
可能这可能是问题所在.
一些提示:
LoadResource和Instantiate)资源.如果所需的内存不是太多,您可以简单地实例化所需的所有资源,并根据需要禁用/启用它们.如果资源内存需求很大,则无法实现.Instantiate和Destroy.创建一个对象池,其中一组资源在应用程序启动时实例化.启用所需的资源,并禁用所有其他资源.而不是销毁对象将其释放到池中,以便可以根据需要禁用和重新安装它.Resources.UnloadUnusedAssets.如果您以前发布了新资源,这只会增加实例化新资源所需的时间.优化内存使用是有用的,但是以恒定的间隔或每次销毁对象时调用它都是没有意义的.