한국어English日本語简体中文繁體中文DeutschไทยTiếng ViệtРусскийPortuguês (Brasil)EspañolBahasa Indonesia

游戏卡顿白皮书 › 只有部分人遇到的问题

后台窗口处理受限 Background window throttling

原因 ID pt-background · 主责 研发团队·客户端开发 · 配合 外部·外部

在含图示和实验的完整版中打开此卡片 →

处于后台窗口的客户端,游戏、引擎、OS 都会减少它的帧和处理量。收到的包不能及时处理,就会积压或溢出。

起因 游戏选项或显卡驱动的后台帧率限制(例如 NVIDIA 驱动可在每秒 20~200 帧之间指定),省电,引擎的后台暂停设置。OS 也会优先把 CPU、GPU 分给前台窗口 → 结果 每帧处理的包数减少,队列堆积,接收缓冲区溢出后包被丢弃 → 画面表现 窗口切到前台时一下子全冒出来,或者有的 NPC 始终看不到

症状
隐身/幽灵实体, 快进, 掉线
因素
停顿, 丢包
谁会遇到
双开时只有一个客户端
何时出现
挂机一段时间后, 一直
负责方
主责 研发团队·客户端开发 · 配合 外部·外部
研发团队要做的事
网络接收放在与游戏循环分开的线程里持续运行,后台也保证最低处理量,打开引擎的后台运行设置(Unity 为 runInBackground)。
外部要做的事
引导玩家关闭显卡驱动的后台帧率限制和电脑的省电模式。
数值参考
Unity 的 runInBackground 设置关闭时,窗口一失去焦点,游戏循环就会停住。如果只在这个循环里接收数据,这段时间里包完全得不到处理。
监控图上
断流后集中到达 · 客户端帧间隔,每帧处理的包数
查看位置
在同一台电脑上把一个窗口放前台、另一个放后台,互换角色对比。用 PresentMon 测两个进程的帧间隔,有游戏侧日志时看窗口焦点状态和每帧处理的包数
确认依据
只有在后台窗口时帧间隔大幅增加(驱动限制时会在与设定帧率对应的间隔处走平)或处理停住,切换窗口后问题也转移到另一个客户端
排除依据
前台窗口同样出现,就不是后台限制造成的。与窗口位置无关、总是同一个客户端异常,看“显示选项不同”或“客户端版本/数据不一致”
确认手段
需在玩家侧环境确认

出处

  1. Application.runInBackground Unity
    runInBackground 默认为 false,此时应用在后台会暂停
  2. Manage 3D Settings (reference) — NVIDIA Control Panel Help NVIDIA
    Background Application Max Frame Rate:把后台游戏的最高帧率限制在每秒 20~200 帧
  3. Priority Boosts Microsoft
    Windows 会把前台窗口进程的优先级提升到不低于后台进程的水平
  4. PresentMon README Intel
    按应用采集 Windows 图形应用 CPU、GPU、显示帧耗时的工具

相关原因

同一层:只有部分人遇到的问题

其他层中同样导致“隐身/幽灵实体”的原因

查看含图示和实验的原卡片