Windows 7(或更高版本)中活动可见 HWND 的数量是不是会显着影响性能?

Posted

技术标签:

【中文标题】Windows 7(或更高版本)中活动可见 HWND 的数量是不是会显着影响性能?【英文标题】:Does the number of active visible HWNDs in Windows 7 (or up) affect performance notably?Windows 7(或更高版本)中活动可见 HWND 的数量是否会显着影响性能? 【发布时间】:2015-08-07 20:49:08 【问题描述】:

诚然,这个问题含糊不清,但我试图避免陷入设计兔子洞。我听说在应用程序中创建数百个按钮和其他控件的性能不如自己编写无窗口控件和自己处理鼠标单击/移动/跟踪/捕获逻辑。

我只想说我的偏好是使用基于 HWND 的控件,因为我不必重新发明***,但如果应用程序将变得不可用,则不必。

【问题讨论】:

您的问题似乎取决于您对“显着”的定义。但当然,自定义窗口系统可以比通用系统性能更高。为什么不使用数百个控件运行测试? 我有 100 多个窗口控件的应用程序。根据经验,这不是问题。 Windows 上的 GUI 系统就是这样设计的。如果它让你担心,试试吧。使用您的表单设计器复制/粘贴面板 - 充满按钮等,以制作一个非常大、复杂的表单,并查看运行应用程序时会发生什么。 【参考方案1】:

根据我使用 HWND 密集型应用程序的经验,我认为您不会遇到重大的一般性能问题。

但是,如果您疯狂地创建 O/S 窗口,则需要确保您没有超出每个进程和每个会话的句柄限制 (which default to 10,000 for a process and 32,768 for the session)。

在某些时候,您将无法创建新的句柄(因此无法创建新的窗口对象),您的应用程序将开始以奇怪的方式运行,并且从此走下坡路。

当您创建大量的操作系统句柄时,您也可能在桌面堆上运行不足,这可能会导致其他不稳定问题。出于这些原因,最好的设计方式是让您在任何可能的用例的限制范围内保持良好状态。

【讨论】:

当您说“非常重 HWND”时,我们指的是数百个同时可见的窗口吗? 在我们的例子中,它是数百个同时可见的窗口,总共有数千个 HWND(其中许多在任何给定时间都被隐藏了)。我认为我们的上限是 12,000,这意味着我们必须推出系统默认设置以允许单个进程创建超过 10,000 个句柄。 '数百个同时可见的窗口' - 你的意思是'访问冲突'消息框? :) '平...平...平...平...平...平...平...平...平...平...平...'跨度> @MartinJames LOL,不,虽然它不会超出可能性范围......

以上是关于Windows 7(或更高版本)中活动可见 HWND 的数量是不是会显着影响性能?的主要内容,如果未能解决你的问题,请参考以下文章

Maven 编译错误:(使用 -source 7 或更高版本来启用菱形运算符)

如何在 Android M 或更高版本中在运行时更改权限时防止重新创建 Activity

获取“推断元组元素名称。请使用语言版本 7.1 或更高版本通过推断名称访问元素。”

不再支持源选项 5。请使用 7 或更高版本

在 Windows Server 2012 或更高版本上安装 Gitea

Delphi 4 Pro 能否在 Windows XP(或更高版本)上可靠地安装和使用?