【问题标题】:BitBlt performance with Aero enabled启用 Aero 的 BitBlt 性能
【发布时间】:2011-11-01 13:05:35
【问题描述】:

我想从 BitBlt 中获得更多性能以捕获屏幕。当 Aero 保持启用时,仅捕获屏幕的 400x400 像素区域可将我机器上的平均捕获时间从平均 50 毫秒(全 1920x1200)减少到大约 33 毫秒(对于 400x400)。这是一个令人失望的低改进。

我唯一的选择是禁用 Aero 吗?我知道当 Aero 被禁用时,我可以在全屏上获得令人眼花缭乱的 3 毫秒快速捕捉。

【问题讨论】:

    标签: c++ performance winapi bitblt


    【解决方案1】:

    Aero 模式下的屏幕截图非常昂贵,因为它需要与 DWM 同步(想想等每个人都不要眨眼来合影),并在 Vista 上锁定整个 GPU 管道。在 Windows 7 上 GDI 性能为 improved by accelerate common GDI operations and reduce GDI locking)

    尝试使用undocumented DWM functionshooks 来获取DWM 使用的共享表面。但是,如果您打算处理图像数据(例如发送到网络或保存到文件),您仍然需要付出代价,通过有时较慢的 FSB 将数据从视频内存移动到系统 RAM。

    【讨论】:

    • 你知道是否可以访问共享表面以在 GPU 上进行操作(着色器)?还是 BitBlt 基本上是获取这些数据的最快方法?
    【解决方案2】:

    我猜现在禁用 aero。我似乎无法真正超过 15 fps,大概是因为它锁定了 30 fps 边界,并且在下一个边界开始之前我无法“进入”获取帧,然后必须等待整个时间过去了。

    【讨论】:

    • 看起来很多 Windows 上的屏幕捕获应用程序都使用这个 API 来完成他们的工作。我同意似乎需要视频采集卡才能可靠地达到 15 帧左右以上。
    • windows 8 提供了一个据说是高性能的“新 api”(不是 BitBlt)。这可能是一种选择...
    猜你喜欢
    • 2011-10-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-23
    相关资源
    最近更新 更多