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

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

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

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

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

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

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

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

总结

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

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

最后

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

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

相关推荐
分享者花花2 小时前
恢复出厂设置后如何从 iPhone 恢复数据
windows·macos·ios·智能手机·excel·cocoa·iphone
苦藤新鸡3 小时前
用网络编程完成windows和linux跨平台之间的通信(服务器)
linux·网络·windows
雪 狼7 小时前
unity对于文件夹的操作
windows·unity·游戏引擎
爱分享的码瑞哥14 小时前
Rust 进阶教程
开发语言·windows·rust
初学️计算15 小时前
网络协议与标准
运维·服务器·windows
ac-er888817 小时前
win10使用小技巧二
windows·技巧·虚拟键盘·防止复制·安装字体
日出等日落17 小时前
Windows系统安装分布式搜索和分析引擎Elasticsearch与远程访问详细教程
windows·分布式·elasticsearch
胡子洲17 小时前
Windows电脑PC使用adb有线跟无线安装apk包
windows·adb·电脑
大卫的纯爱战士1 天前
文件读写操作之c语言、c++、windows、MFC、Qt
c语言·c++·windows·qt·mfc
栗克1 天前
SerialportToTCP② 全
网络·windows·udp·c#·.net·tcp·用户界面