“尖峰”分析器?

Posted

技术标签:

【中文标题】“尖峰”分析器?【英文标题】:"Spike" profiler? 【发布时间】:2010-08-20 07:48:31 【问题描述】:

我正在编写一个游戏,虽然它的性能在大多数情况下都很好,但有时它会慢到爬行。普通分析器对此没有帮助,因为它们记录了我的游戏运行的整个时间,并且滞后部分中的重要信息在所有平滑部分中被稀释了。是否有任何工具或库可以帮助我隔离问题?

【问题讨论】:

这可能是由于垃圾回收。您是否正在创建和释放大量对象? 其实,我想我是。我实现了一个性能视图,发生的情况是我使用的内存会不断增加,并且每隔几秒左右就会减少几兆字节,并且随着时间的推移,基本内存消耗会迅速增加。 【参考方案1】:

你几乎肯定会被垃圾收集击中。

是的,有一个工具可以解决这个问题。你想要CLR Profiler。这将准确显示您分配内存的位置。

在 Xbox 上,垃圾收集器将在每分配 1MB 后运行,而且速度很慢。 Windows GC 更宽容,但仍会导致帧率抖动。

避免垃圾收集卡顿的最佳方法是在游戏运行时不分配任何内容。在用户不会注意到的加载屏幕期间进行分配。

我建议阅读 Shawn Hargreaves 博客上的 this post 和 this post。

【讨论】:

好的,我从分析器获得了一些数据,我正在等待它加载,但与此同时,还有其他可用的分析器不会将我的游戏变成文字幻灯片吗? 就其本质而言,分析会让您的游戏陷入困境。但即便如此,它也不会改变你的分配配置文件......所以你可以看到垃圾是在哪里创建的 @Joel:是的,但这不是“一点”:这是从(最多)60FPS 到每 3 秒左右 1 帧。很难控制以获得体面的运行。 在我修复了 Texture2D 的持续创建后,我看到在 30 秒的运行中总共完成了 593 个对象,并且分析器说我的对象都没有被丢弃。我的问题也没有解决:/ @RCIX:最终确定的 593 个对象似乎非常高。但无论如何,这不是你想看的。您需要的按钮是Time Line。理想情况下,它会在您的游戏开始后趋于平稳。使用分配图(特别是通过“显示谁分配”)进一步缩小范围。另外:CLR Profiler 记录分配和 GC。如果您在游戏期间不进行分配,那么它对您的帧率影响应该很小。【参考方案2】:

你说你从一个需要 16 毫秒的帧到 3000 毫秒。所以在很长的框架内,它花费 (3000 - 16)/3000 = 99.5% 的时间做你没有预料到的事情。

在这 3 秒内,您如何知道它在做什么?

暂停几次,然后检查调用堆栈。

不会在每次暂停时看到它在做什么的机会是 0.5%

如果它在垃圾收集器中,这应该确认它。如果它在做其他事情,它也会告诉你。

【讨论】:

更准确地说,游戏会减慢到每秒 2-5 帧,但我的更新时间并没有显示出来。幻灯片(帧之间的几秒钟)仅在我对它进行内存分析时才显示。 @RCIX:不过,当它变慢时暂停它,你会发现问题。 (5fps = 12x 减速,所以每次暂停时捕捉到它的机会是 92%。)人们不习惯这个概念,但如果你尝试它会变得很自然。详细的原因在这里:***.com/questions/1777556/alternatives-to-gprof/…

以上是关于“尖峰”分析器?的主要内容,如果未能解决你的问题,请参考以下文章

尖峰眼科 | 也谈Symfony新无极人工晶体(上) 陈旭

小波去噪

earch模型结果怎么看

有没有办法从 Unity3d 获得一个重要信息?

在 Python 中分割成试验的尖峰列车图(神经科学)

在 Python 中分割成试验的尖峰列车图(神经科学)