gpt4 book ai didi

c++ - Win API 中的内存 DC 有多便宜/多贵?

转载 作者:太空宇宙 更新时间:2023-11-04 01:02:22 25 4
gpt4 key购买 nike

我正在开发一个包含许多 DIB 位图(由 CreateDIBSection 创建)并且必须使用 Win API 在其上绘制大量文本的程序。

为了绘制位图,Windows 需要设备上下文,由 CreateCompatibleDC 创建。

现在有两种方法:

  1. 我可以为每个位图创建一次 DC,将其用于绘图并在释放位图时将其删除。

  2. 或者我可以只在需要绘制到位图时创建 DC,调用绘制函数并删除 DC。

什么是更好的方法?我更喜欢第一个,因为调用次数较少 - 这将使我的代码更小,速度也更快。

但是为每个位图保留一个长期存在的 DC 是不是太昂贵了?

Edit1:该应用程序实际上是一个 GUI 工具包库,可以在未来以不同且不可预测的方式使用,因此我需要一个平衡的决策,尽可能提高性能和减少系统资源使用。

最佳答案

GDI objects每个进程和每个 session 都是有限的。您正在与同一 session 中运行的所有其他进程竞争资源。考虑到这一点,您应该仅在需要时使用 GDI 资源(问题中的选项 2)。

Mark Russinovich 的博客条目 Pushing the Limits of Windows: USER and GDI Objects – Part 2进入相当多的细节。总而言之,这里是窗口管理器对 GDI 资源的限制列表:

  • 每个进程 10.000 个 GDI 对象(默认值,可通过注册表项 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Windows\GDIProcessHandleQuota 配置)。
  • 每个用户 session 65.535 个 GDI 对象。
  • GDI 对象内存限制是分页池限制(参见 Pushing the Limits of Windows: Paged and Nonpaged Pool)。

关于c++ - Win API 中的内存 DC 有多便宜/多贵?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33472482/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com