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

游戏卡顿白皮书 › L2 客户端操作系统与设备

窗口最小化/失去焦点时处理受限 Minimized / unfocused window throttling

原因 ID co-unfocused · 主责 研发团队·客户端开发

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

切到别的窗口或最小化游戏时,游戏和 Windows 为了省电会让游戏降速运行。切回来时,积压的数据包会一下子涌来,或者已经掉线。

起因 用 Alt+Tab 切到别的窗口,或最小化游戏 → 结果 游戏不可见时大幅降低 FPS 或直接暂停,Windows 也会降低不可见程序的优先级 → 画面表现 切回来的瞬间出现快进,切出时间长就会掉线

症状
快进, 一卡一卡, 掉线
因素
停顿
谁会遇到
只有我
何时出现
做特定操作时, 挂机一段时间后
负责方
主责 研发团队·客户端开发
研发团队要做的事
窗口不可见时,数据包接收和心跳仍在独立线程中继续,检查引擎的“后台运行”设置,切回时一次性对齐到最新状态。
数值参考
窗口不可见时把 FPS 降到 5~10,一帧就是 100~200 ms。逐帧处理数据包的游戏,读取数据包也会相应变慢。
监控图上
断流后集中到达 · 帧间隔(切换窗口前后)、已处理的数据包数
查看位置
开着 PresentMon 试着 Alt+Tab、最小化,查看窗口不可见时的帧间隔。在游戏日志中记录窗口焦点变化的时刻,与断线原因对照
确认依据
窗口不可见期间帧间隔拉长到 100 ms 以上或记录中断,切回瞬间一次性处理积压的数据包,出现快进。切出时间长会因心跳超时而掉线
排除依据
窗口一直在前台也一样,看“后台进程占用 CPU”或网络侧
确认手段
需在玩家侧环境确认
深入了解
Windows 11 不保证给最小化、完全被遮挡且不发声的窗口程序提供 1 ms 定时器。用电池运行的笔记本会把这类程序降到最省电的速度;在混合核心架构的 CPU 上,还可能让它跑在较慢的能效核上。同一台电脑上的两个客户端如果只有后台那个异常,也请看“后台窗口处理受限”。

出处

  1. Quality of Service Microsoft
    既看不见也听不到的窗口程序被设为 Low QoS,使用电池时按最省电的 CPU 速度和能效核调度
  2. timeBeginPeriod function (timeapi.h) Microsoft
    Windows 11 不保证被遮挡或最小化窗口的进程获得高于默认的定时器精度
  3. Application.runInBackground Unity
    Unity 默认值为 false,窗口转到后台时游戏循环停住
  4. PresentMon Capture Application (README-CaptureApplication.md) Intel
    MsBetweenPresents:本次 Present() 调用与上一次调用之间的时间(ms)

相关原因

同一层:L2 客户端操作系统与设备

其他层中同样导致“快进”的原因

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