sco*_*one 15 c# mono garbage-collection unity-game-engine
这是一个非常普遍的基于学习的问题,而不是技术问题.
我正在Unity中制作游戏.游戏涉及许多相当复杂,高对象数的进程,因此,我产生了大量的垃圾.每个制作使用托管代码的游戏的人都知道,垃圾收集峰值是一个巨大的口号.我也试图瞄准移动设备,所以这种痛苦被放大了.
我的目标很简单:跟踪生成最多垃圾和池的过程并重用所涉及的对象,以减少垃圾收集器的负载.我已经处理了所有明显的类,但我的GC问题仍然存在.如果有人能在这里提供更多的智慧,请带上它.
我在研究中无法追踪的是测量GC负载和跟踪代码本身问题点的好方法.我可以从Unity和诊断类中获取有关内存池大小的指标(虽然我不知道这些数字的真正意义)并且我可以显示自开始以来发生的GC集合的总数,但是我调试这个问题的知识在那里结束了.
我知道必须有更好的方法来解决这个问题.任何人都可以指出我可以帮助我在这里的正确的工具或框架类(或库?)?我已经看到一些调试器程序(sgen?),它是Mono的一部分,但我找不到下载或更不用说如何将它连接到Unity游戏的指南.
任何帮助将不胜感激.谢谢.
S.R*_*ond 14
特别是对于C#和Unity3D,Unity3D内置的探查器是您可以使用的最佳工具.您应该能够使用Unity Profiler.特别是CPU Profiler:

我重点介绍了最重要的一栏 - GC Alloc - 它在逐帧的基础上显示了已经分配用于垃圾收集的内存.这里游戏的目的是使该列尽可能接近零.
我建议花几个小时在那里,玩你的游戏,暂停它并挖掘你的代码区域,其中GC Alloc显示数字.
最后,我强烈建议你检查出这个由统一内存调试和正确使用Unity编辑器探查开发一个视频教程.