程序可以创建多少个用户界面对象?

有人提到这样一个问题:"一个程序最多可以注册多少个窗口类?"

问题的答案不是一个具体的数字。因为大多数用户界面对象都来自一个共享的内存池,我们称之为"桌面堆内存"。尽管我们可以计算一个最大的理论值,但是在实际的场景中,这个理论值不会达到,因为还有很多其他用户界面对象也是在这个桌面堆中。

举个例子,用户可见的菜单对象和窗口对象保存在桌面堆中,还有一些其他不可见的对象也保存在其中,例如:激活的窗口枚举,窗口的位置句柄,甚至挂接的线程输入队列等。

如果创建了过多的窗口或者菜单,则留给其他对象(例如,注册窗口类)的空间就不多了,因为所有这些用户界面对象都共享同一个内存空间。

当有人问这类问题的时候,通常真正的问题是他们的程序消耗了太多的桌面堆空间,程序可能需要重新设计,以节省对桌面堆资源的占用。例如,一个程序如果需要创建几千个窗口类,这会极大的占用桌面堆空间,通常,这表明这个程序在设计方面需要做出调整。

另外一个类似的问题是:一个进程最多可以创建多少个线程。我们可以计算出理论值,但这样是一个程序需要重新设计的标志。

另一方面来说,即使一个应用程序真的可以创建几千个窗口类,用户使用起来也会感到疑惑,所以,从可用性的角度来说,最好还是重新设计,以不那么多的占用资源。

总结

程序开发早期,我会使用 GUI 对象监测工具来查看创建的用户界面对象的数量,看看是否有点"设计过重"。

因为一旦开发到了后期,重新设计的成本将会十分巨大。

最后

Raymond Chen的《The Old New Thing》是我非常喜欢的博客之一,里面有很多关于Windows的小知识,对于广大Windows平台开发者来说,确实十分有帮助。

本文来自:《On the unanswerability of the maximum number of user interface objects a program can create》

相关推荐
Eiceblue35 分钟前
.NET框架下Windows、Linux、Mac环境C#打印PDF全指南
linux·windows·.net
skywalk81631 小时前
Windows 下常见的 开源输入法(IME)
windows·开源·输入法
yingdonglan1 小时前
鸿蒙跨端Flutter学习——GridView高级功能
linux·运维·windows
JAVA+C语言1 小时前
多主机 TCP 通信
网络·windows·tcp/ip
逃课的蟠桃3 小时前
局域网可用的项目管理系统对比表解读:5款定位与合规要点
软件开发
比奇堡鱼贩4 小时前
python第二次作业--函数
linux·运维·windows
启效云6 小时前
【技术赋能实战】焱蓝智益科技:如何用物联网+自组网打通消防应急通信“最后一公里”?
科技·物联网·低代码·软件开发·低代码开发
小白郭莫搞科技6 小时前
鸿蒙跨端框架Flutter学习:ListView卡片样式详解
linux·服务器·windows
九皇叔叔6 小时前
【05】SpringBoot3 MybatisPlus 添加(Mapper)
windows
水饺编程7 小时前
第4章,[标签 Win32] :系统字体与字符大小
c语言·c++·windows·visual studio