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


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

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

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

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

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

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

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

    总结

    程序开发早期,我会使用 GUI 对象监测工具来查看创建的用户界面对象的数量,看看是否有点“设计过重”。
    因为一旦开发到了后期,重新设计的成本将会十分巨大。

    最后

    Raymond Chen的《The Old New Thing》是我非常喜欢的博客之一,里面有很多关于Windows的小知识,对于广大Windows平台开发者来说,确实十分有帮助。
    本文来自:《On the unanswerability of the maximum number of user interface objects a program can create》

  • 相关阅读:
    Servlet全生命周期
    ApiJson简单使用
    Linux ARM平台开发系列讲解(网络篇)1.8 PHY中断机制分析
    算法与诗数据结构 --- 查找 --- 线性表的查找
    linux学习2 — ubuntu 常用的命令总结
    vue2基础知识-2
    微服务框架 SpringCloud微服务架构 20 RestClient 操作索引库 20.2 hotel 数据结构分析
    linux中操作服务器常用命令
    特殊流&Properties属性集实例遇到的问题及解决方法
    Nginx实现四层代理与七层代理
  • 原文地址:https://blog.csdn.net/mmxida/article/details/133981483