gpt4 book ai didi

optimization - Unity3D:优化垃圾收集

转载 作者:行者123 更新时间:2023-12-03 15:30:23 25 4
gpt4 key购买 nike

Unity3D Profiler给了我主要是关于垃圾收集的尖峰。在下面的截图中,三个红色尖峰代表我在游戏中的三个档位。这些停顿中的每一个都是 100+ms,大部分时间都花在 TrackDependencies 上。 .

根据Unity instruction ,我尝试将此添加到我的代码中:

if (Time.frameCount % 30 == 0)
{
System.GC.Collect();
}

这没有帮助。我仍然有尖峰,它们仍然需要 100 多毫秒。到底发生了什么,我可以做些什么来优化我的游戏?

PS:

我正在动态创建和销毁很多 GameObject在我的游戏中。这会是个问题吗?

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

profiler

最佳答案

This didn't help. I still have spikes and they still take 100+ms. What exactly is going on and what can I do to optimize my game?



System.GC.Collect你只是强制垃圾收集。如果您已分配大量内存以从上次收集中释放,那么您将无法避免尖峰。这仅在尝试随着时间的推移分配垃圾收集以避免大量释放时才有用。

I am dynamically creating and destroying a lot of GameObjects in my game. Could that be a problem?



可能这可能是问题所在。

一些提示:
  • 尝试在应用程序开始时分配( LoadResourceInstantiate )尽可能多的资源。如果所需的内存不是太多,您可以简单地实例化您需要的所有资源并按需禁用/启用它们。如果资源内存需求很大,这是无法实现的。
  • 避免在游戏中调用 InstantiateDestroy .创建 对象池 在应用程序启动时实例化一组资源。启用您需要的资源,并禁用所有其他资源。与其销毁对象,不如将其释放到池中,以便可以按需禁用和重新启用它。
  • 避免在游戏中调用 Resources.UnloadUnusedAssets .如果您之前发布过新资源,这只会增加实例化新资源所需的时间。优化内存使用很有用,但是以恒定间隔或每次销毁对象时调用它是没有意义的。
  • 关于optimization - Unity3D:优化垃圾收集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17481863/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com