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

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

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

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

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

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

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

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

总结

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

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

最后

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

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

相关推荐
万亿少女的梦16813 分钟前
基于Spring Boot、Java与MySQL的网络订餐系统设计与实现
java·spring boot·mysql·系统设计·网络订餐
广州灵眸科技有限公司10 小时前
xfce桌面触摸校准:基于灵眸科技EASY-EAl-Orin-Nano
数据库·windows·科技
王维同学16 小时前
[原创][Windows C++]LSA 认证、安全与通知包的注册表枚举
c++·windows·安全
YCOSA202516 小时前
雨晨 Windows 11 IOT 企业版 LTSC 24H2 轻装 2合1 26100.8968
windows·物联网
汤姆yu16 小时前
CodeGeeX 4完整安装与实操使用全指南
人工智能·windows·ai·智能体·视频模型
吐了啊取名字太难19 小时前
美颜系统AI修图本地跑并支持Mac、win、安卓、iOS不卡顿
android·人工智能·windows·数码相机·mac·ai编程
筱羽_筱羽21 小时前
VS2022 编译SOEM
windows·visualstudio·soem
后端优选官1 天前
上海Agent开发公司:企业级智能体软件的技术架构与落地评估
数据库·人工智能·架构·软件开发·开发经验·上海
love530love1 天前
【排障实录】GPT Desktop (Codex) 开启 WSL 智能体模式后无法启动?手把手教你修复
人工智能·windows·gpt·agent
WangWei_CM1 天前
Session Manager 的 BootExecute、SetupExecute 与 Execute 多字符串解析
windows