游戏性能优化访谈

Han*_*xan 6 optimization performance

这个问题出现了:

你正在寻找游戏中的瓶颈,但是你正在改变的是让游戏变得更快,无论是GPU管道还是CPU中的任何东西.没有任何东西在飙升,而且缓慢似乎分布在各处.下一步你要怎么做?

我很沮丧.这是一个技巧问题吗?在修复性能问题时,我总是认为这是您需要缩放所有内容的时间点.我不认为它是mem alloc,因为它显示在CPU perf中.

mat*_*sta 4

我会要求提供更多信息。“慢”是表现不佳的一个不好的指标,并且是一种症状的分类,而不是症状本身。例如,您可以将“慢”描述为:

  • 低帧率
  • 对输入的响应能力差
  • 高响应性和平滑的帧速率,但游戏机制缓慢(即:玩家和实体移动平滑但非常缓慢)
  • 网络游戏时,网络延迟明显

所有这些问题都有不同的潜在原因和解决方案:

  • 低但一致的帧速率可能是由于游戏循环效率低下造成的。仅运行您最喜欢的分析器可能表明大量时间花费在某一特定代码段上。例如,在我编写的一款游戏中,我发现低 FPS 是由于多次计算实体之间的距离而没有缓存的错误循环造成的。在另一个游戏中,我发现我用来执行地形查找的数据结构不是O(N)( O(1)python stdlib...ick)。您无法诊断看不到的问题,而分析是第一道防线。
  • 响应能力差可能是由多种原因造成的。如果 FPS 很高但控件响应缓慢,则您用来访问控件的 API 可能很糟糕。某些控制器可能有蹩脚的驱动程序,可能会影响响应能力。它甚至可能是你的游戏循环:你可能只是没有足够频繁地检查控制器的输入(也许你没有检查每个刻度)。在上述一款游戏中,我遇到了一个问题,某些操作会产生延迟效果:您使用一个物品,游戏会在半秒左右后做出响应。事实证明,该问题是由于客户端与服务器进行完整往返以执行操作、验证操作是否发生并等待服务器广播回该项目已使用而引起的。只需让该行为在客户端上立即发生即可解决该问题。
  • 缓慢的游戏机制可能表明游戏常数设置得不够高。如果一切都平滑而美丽,但一切都移动得很慢,则很可能默认速度或加速度没有调得足够大。
  • 网络延迟可能是由多种原因引起的:您连接的路由器可能出现故障,您正在开发的 VPS 可能位于正在遭受 DDoSed 的主机上,您可能正在使用过度(但统一)的协议喋喋不休,或者您只是通过线路发送了太多数据。在我在大学里编写的一款模拟软件中,计算是在实验室中的一些强大计算机上执行的,而可视化则是在宿舍中的 MBP 上运行的。事实证明,我从实验室计算机发送到宿舍的大量数据足以使建筑物中廉价的网络交换机超载并丢弃数据包,导致可怕的延迟,但日志输出完全合理。

所以我想这里的答案是让面试官更全面地描述症状。@Ali 的答案很好,但可能手头有一个更微妙的问题,需要一些哄骗来诊断。