You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Windows Capture Performance (DXGI) Bug:AcquireNextFrame鼠标移动时性能骤降求解决方案

规避DXGI AcquireNextFrame 鼠标移动时的性能损耗方案

1. 禁用OutputDuplication的光标捕获

IDXGIOutputDuplication 默认会同步捕获系统光标更新,这是鼠标移动时帧捕获卡顿的核心诱因。你可以通过以下方式规避:

  • 捕获帧后不调用 GetFramePointerShape 获取光标数据,直接跳过光标处理逻辑;
  • 若场景不需要显示系统光标,调用ShowCursor(FALSE)禁用硬件光标,改用自定义逻辑绘制光标,彻底消除DXGI的光标同步开销。

2. 批量处理光标更新

如果必须保留系统光标,不要每帧都处理光标更新:

  • 维护独立的光标状态缓存,仅当光标位置/形状发生变化时才更新缓存;
  • 在帧捕获循环中,每隔2-3帧才检查一次光标更新,降低同步等待的频率。

3. 分离光标捕获与帧捕获线程

将光标处理逻辑从帧捕获线程剥离:

  • 帧捕获线程专注于调用AcquireNextFrame获取画面数据,不处理任何光标相关操作;
  • 单独创建低优先级线程,定期通过GetCursorPos/GetIconInfo读取光标状态,再将数据传递给渲染线程叠加,避免光标操作阻塞帧捕获流程。

4. 切换到更高效的桌面捕获API(推荐Windows 10+)

对于Windows 10 1903及以上版本,微软提供的Windows.Graphics.Capture WinRT API在性能和光标处理上远优于DXGI OutputDuplication:

  • 支持单独控制是否捕获光标,无需额外同步开销;
  • 基于现代合成架构,帧捕获延迟更低,鼠标移动时的性能波动极小。

补充说明

你遇到的是DXGI OutputDuplication的已知设计缺陷,根源在于光标更新会触发额外的桌面合成同步,导致帧捕获线程被频繁阻塞。以上方案中,切换到Windows.Graphics.Capture是长期最优解,前三种方法则适合需要兼容旧系统的场景。

内容的提问来源于stack exchange,提问作者yanrk

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.18 15:40:29