我正在写一个游戏,虽然它的表现在大多数时候都很好,但它有时会慢慢爬行。普通的剖析器在这方面没有帮助,因为它们记录了我的游戏运行的整个时间,并且滞后部分中的重要信息在所有平滑部分被稀释。是否有任何工具或库可以帮助我找出问题?
答案 0 :(得分:3)
你几乎肯定会受到垃圾收集的打击。
是的,有一个工具可以解决这个问题。你想要CLR Profiler。这将显示您准确分配内存的位置。
在Xbox上,垃圾收集器将在每1MB分配后运行,并且速度很慢。 Windows GC更宽容,但仍然可能导致帧速率抖动。
避免垃圾收集口吃的最佳方法是在游戏运行时不分配任何东西。在加载屏幕期间进行分配,用户不会注意到这一点。
答案 1 :(得分:1)
你说你要从一帧花费16ms到3000ms。因此,在很长一段时间内,花费(3000 - 16)/ 3000 = 99.5%的时间做一些你没想到的事情。
在这3秒钟内,你怎么知道它在做什么?
暂停几次,然后检查调用堆栈。
你不会看到它在每次暂停时所做的事情的几率为0.5%
如果它在垃圾收集器中,这应该确认它。如果它正在做其他事情,它也会告诉你。