Closed. This question does not meet Stack Overflow guidelines。它当前不接受答案。












想改善这个问题吗?更新问题,以便将其作为on-topic用于堆栈溢出。

6年前关闭。



Improve this question




这是一个非常普遍的基于学习的问题,而不是技术问题。

我正在Unity中制作游戏。游戏涉及许多非常复杂的,高对象数的过程,因此,我会产生大量垃圾。众所周知,使用托管代码制作游戏的人都知道,垃圾回收峰值是一个巨大的嗡嗡声。我也在尝试针对移动设备,因此这种痛苦被放大了。

我的目标很简单:追踪产生最多垃圾和池的过程,并重用所涉及的对象,以减少垃圾收集器的负担。我已经解决了所有显而易见的问题,但是我的GC问题仍然存在。如果有人可以在这里提供更大的智慧,请继续使用。

在研究中无法找到的方法是一种很好的方法,可以测量GC负载并确定代码本身中的问题点。我可以从Unity和诊断类中获取有关内存池大小的指标(尽管我对这些数字的真正含义并不了解),并且可以显示自开始以来发生的GC收集的总数,但是我调试该问题的知识到此为止。

我知道必须有更好的方法来解决此问题。谁能指出我可以在这里帮助我的正确工具或框架类(或库?)?我已经看到了Mono的一部分调试程序(sgen?),但是我找不到下载内容,更a论如何将其连接到Unity游戏的指南。

任何帮助将不胜感激。谢谢。

最佳答案

特别是对于C#和Unity3D,内置在Unity3D中的探查器是您将获得的最佳工具。您应该能够对Unity Profiler有所了解。具体来说CPU Profiler:

我已经突出显示了最重要的列- GC Alloc -逐帧显示已分配给垃圾回收的内存。此处游戏的目的是使该列尽可能始终接近零。

我建议在其中花几个小时,玩游戏,暂停游戏,并挖掘代码中GC Alloc显示数字的区域。

最后,我强烈建议您阅读由Unity开发人员之一进行的 this 视频教程,内容涉及内存调试和正确使用Unity Editor分析器。

关于c# - 我如何找出造成垃圾的原因? ,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/20413333/

10-12 05:30