2016-11-30 188 views
1

通常配置文件数据是,通过对运行程序的堆栈进行随机抽样以查看哪个函数正在执行,在运行期间内,可以统计确定哪些方法/函数调用最耗时,需要干预的瓶颈。如何描述打嗝的表现?

但是这与整体应用/游戏性能有关。有时会发生在性能上存在单一和孤立的打嗝,无论如何都会造成可用性问题(用户注意到它/引入的滞后于某些内部机制等)。通过几秒钟的执行定期分析是不可能知道的。即使打嗝的持续时间足够长(说30毫秒,这还不够),为了检测一些过于频繁调用的方法,我们仍然会错过许多其他方法的执行,这些方法由于随机而被“跳过”采样。

那么是否有任何技术来描述打嗝,以便在修复这些“稀有瓶颈”之后保持帧率更稳定?我假设使用C#或C++等语言。

回答

1

这已经回答过了,但我不能找到它,所以这里去...

的问题是并条机常规有时花费太长时间。 假设它通常少于1000/30 = 33毫秒,但偶尔需要超过33毫秒。

DrawFrame的开头,设置一个定时器中断,在40ms后过期。 然后在DrawFrame的末尾,禁用中断。 所以如果它触发,你知道DrawFrame是花了一个非常长的时间。

在中断处理程序中放置一个断点,并在它到达时检查堆栈。 机会很大,你在做这件昂贵的事情的过程中已经发现了它。 这是random pausing的变体。

+0

假设时间消耗事件开始发生在33毫秒后.. 40毫秒后电子.. – GameDeveloper

+0

@DarioOO:并非它开始发生40毫秒后,但它仍然发生在40毫秒后。 –

+0

我们可能会有延迟,因为通常发生在1-3毫秒之间的事情持续1到30毫秒(在帧的开始处)。我们完全错过了这个方法(所以有33毫秒的中断不可能发生) – GameDeveloper