Optimization Unity3D:优化垃圾收集
Unity3D给了我很多关于垃圾收集的提示。在下面的屏幕截图中,三个红色的尖刺代表了我在游戏中的三个暂停。每个暂停时间都超过100毫秒,大部分时间都花在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
TrackDependencies
上
根据,我尝试将以下内容添加到我的代码中:
if (Time.frameCount % 30 == 0)
{
System.GC.Collect();
}
这没用。我仍然有尖峰,他们仍然需要100+毫秒。到底是怎么回事,我可以做什么来优化我的游戏
附言:
我在游戏中动态地创建和销毁大量的GameObject
s。这可能是个问题吗
我在循环或数组中没有字符串连接作为返回值,正如在中所述
这没用。我仍然有刺,他们仍然需要100+毫秒。什么
到底是怎么回事,我能做些什么来优化我的游戏
使用System.GC.Collect
只需强制垃圾收集。如果在上次收集时分配了大量要释放的内存,则无法避免出现峰值。这只在试图随着时间的推移分发垃圾回收时有用,以避免大规模的释放
我在游戏中动态地创建和销毁很多游戏对象
游戏这可能是个问题吗
也许这就是问题所在
一些提示:
- 在应用程序开始时,尝试分配(
和LoadResource
)尽可能多的资源。如果所需内存不太多,您可以简单地实例化所需的所有资源,并根据需要禁用/启用它们。如果资源内存需求巨大,这是无法实现的实例化
- 避免对
实例化
和
销毁
的ingame调用。创建一个对象池,当应用程序启动时,在其中实例化一组资源。启用所需的资源,并禁用所有其他资源。不要销毁对象,而是将其释放到池中,以便可以根据需要禁用和重新启用它
- 避免对
资源进行ingame调用。卸载未使用的资产。这只会增加实例化新资源所需的时间(如果您以前发布过它)。优化内存使用是很有用的,但每隔一段时间或每次销毁对象时调用它是没有意义的
Resources.UnloadUnusedAssets()代码>