当前位置: 首页 > news >正文

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

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

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

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

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

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

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

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

总结

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

最后

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

相关文章:

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

有人提到这样一个问题:”一个程序最多可以注册多少个窗口类?” 问题的答案不是一个具体的数字。因为大多数用户界面对象都来自一个共享的内存池,我们称之为”桌面堆内存”。尽管我们可以计算一个最大的理论值,但是在实际的场景中&#xff0…...

业绩不俗,毛利率下滑,股价接连下跌,片仔癀将向何处去?

撰稿|行星 来源|贝多财经 10月16日,中药龙头企业漳州片仔癀药业股份有限公司(600436.SH,下称“片仔癀”)发布截至9月30日的2023年前三季度业绩报告。发布财报后,片仔癀的股价多日下跌。 10月17日、18日、19日和20日…...

云安全—docker容器镜像检测

0x00 前言 docker镜像是属于整个云原生的重要基石之一,如果从镜像开始就没有安全性的话,那么整个云原生也就没有任何的安全性可言。所以镜像检测技术就成为了一个比较重要的点,本篇将通过研究docker镜像工具来整体分析风险以及应对方案。 市…...

JDBC相关记录

JDBC:Java DadaBase Connectivity 即Java语言连接数据库。 本质:JDBC是SUN公司制定的一套接口(interface)。 作用:不同的数据库有自己独特设计原理,JDBC的可以让Java程序员关注业务本身,而不需要…...

Nginx的基本介绍 安装 配置文件 日志

一、Nginx介绍二、nginx的优点三、多路复用1、I/O multiplexing 多并发 四、nginx内部技术架构五、安装NginxNginx部署-yum安装获取Nginx的yum源yum安装Nginx浏览器访问 编译安装Nginx安装编译环境安装依赖环境创建nginx用户安装nginx启动nginx实现nginx开机自启(脚…...

docker部署nginx并设置挂载

前言: 最近在学习docker和nginx,因为容器在运行过程中,相关的配置文件及日志都会存在容器内。对容器以来较高,当容器不存在的时候。所有的文件也就都没有了。并且当需要查看日志,修改配置文件的时候必须进入到容器内部…...

MAC如何在根目录创建文件

在这之前先明确一下啥是根目录。 打开终端,输入cd /,然后输入 ls 查看根目录下有哪些文件 可以看到 usr、etc、opt 这些文件的地方才叫根目录,而不是以用户命名,可以看到音乐、应用程序、影片、桌面的地方哈 介绍一种叫做软连接…...

某全球领先的芯片供应商:优化数据跨网交换流程,提高安全管控能力

1、客户介绍 某全球领先的芯片供应商,成立于2005年,总部设于北京,在国内上海、深圳、合肥等地及国外多个国家和地区均设有分支机构和办事处,致力于为客户提供更优质、便捷的服务。 2、建设背景 该公司基于网络安全管理的需求&am…...

自然语言处理---文本预处理概述

自然语言处理(Natural Language Processing,简称NLP)是计算机科学与语言学中关注于计算机与人类语言间转换的领域。其主要应用于:语音助手、机器翻译、搜索引擎、智能问答等。 文本预处理概述 文本语料在输送给模型前一般需要一…...

GCC编译器 什么是宏? 标识符和关键字

一.GCC是什么? GCC是用于编译C语言和其它语言的开源软件。 全称是 GNU Compiler Collection,意思是GNU编译器集和。 支持多种操作系统和硬件平台。二.GCC的作用 GCC的作用是将源码转换为可执行的文件,使之可以在计算机上运行。三.GCC编译c文…...

【GESP】2023年06月图形化三级 -- 自幂数判断

文章目录 自幂数判断【题目描述】【输入描述】【输出描述】【参考答案】其他测试用例 自幂数判断 【题目描述】 自幂数是指N位数各位数字N次方之和是本身,如153是3位数,其每位数的3次方之和是153本身,因此153是自幂数,1634是4位数…...

MySQL常见面试题

一、存储引擎相关 (1)MySQL 支持哪些存储引擎? MySQL支持多种存储引擎,比如InnoDB,MyISAM, MySQL大于等于5.5之后,默认存储引擎是InnoDB (2)InnoDB 和 MyISAM 有什么区别? InnoD…...

前端HTML CSS JS风格规范

本文代码规范来自HTML/CSS代码开发规范文档 文件命名规范 使用小写字母、数字和下划线组成文件名。 避免使用特殊字符和空格。 使用语义化的命名,能够清晰地表达出文件的功能或内容。 目录结构规范 使用约定俗成的目录结构,如:src/compon…...

为什么spring默认采用单例bean

概 述 熟悉 Spring开发的朋友都知道 Spring 提供了 5种 scope,分别是: singleton: 单例模式,当spring创建applicationContext容器的时候,spring会欲初始化所有的该作用域实例,加上lazy-init就可以避免预处理&#xf…...

Redisson分布式锁学习

之前工作中一直使用redis来实现分布式锁,但是最近项目使用了云弹性,机器会涉及到扩缩容,涉及到优雅停机的问题,普通的redis分布锁,一般使用时会设置锁的时间,但是如果在加锁期间 JVM异常重启等发生会导致分…...

Metabase:简单快捷的商业智能与数据分析工具 | 开源日报 No.61

moby/moby Stars: 66.8k License: Apache-2.0 Moby 是一个由 Docker 创建的开源项目,旨在实现和加速软件容器化。它提供了工具包组件的“乐高集”,可以将它们组装成基于容器的自定义系统的框架。组件包括容器生成工具、容器注册表、业务流程工具、运行时…...

【无标题】高流量大并发Linux TCP性能调优

最近在使用jmeter做压测,当jmeter的并发量高的时候发现jmeter服务器一直报错Cannot assign requested address, 查看了一下发现系统中存在大量处于TIME_WAIT状态的tcp端口 netstat -n | awk ‘/^tcp/ {S[$NF]} END {for(a in S) print a, S[a]}’ TIME_W…...

优雅的用户体验:微信小程序中的多步骤表单引导

前言 在微信小程序中,实现一个多步骤表单引导界面既可以提供清晰的任务指引,又可以增加用户体验的互动性。本文将探讨如何使用微信小程序的特性,构建一个流程引导界面,帮助用户一步步完成复杂任务。我们将从设计布局和样式开始&am…...

Kotlin中的委托、属性委托和延迟加载

委托模式是一种常用的设计模式,用于将某个对象的责任委托给另一个对象来处理。在Kotlin中,委托可以通过关键字by来实现,主要分为类委托和属性委托两种形式。此外,Kotlin还提供了延迟加载的功能,可以在需要时才进行初始…...

轻松合并Excel工作表:Java批量操作优化技巧

摘要:本文由葡萄城技术团队于CSDN原创并首发。转载请注明出处:葡萄城官网,葡萄城为开发者提供专业的开发工具、解决方案和服务,赋能开发者。 前言 在Excel中设计表单时,我们经常需要对收集的信息进行统计分析。例如&a…...

Pixel Epic · Wisdom Terminal 快速入门:Visual Studio开发环境下的首次调用

Pixel Epic Wisdom Terminal 快速入门:Visual Studio开发环境下的首次调用 1. 准备工作 在开始之前,我们需要确保开发环境已经准备就绪。如果你已经安装了Visual Studio,可以跳过安装步骤。 1.1 Visual Studio安装 对于还没有安装Visual…...

轻量级TTS神器:CosyVoice-300M Lite功能体验与效果测评

轻量级TTS神器:CosyVoice-300M Lite功能体验与效果测评 1. 产品定位与技术背景 1.1 为什么需要轻量级TTS 在智能硬件和边缘计算快速发展的今天,传统的云端语音合成方案面临三大挑战: 硬件依赖:大多数高质量TTS需要GPU加速&…...

Python FastAPI 异步请求调度逻辑

Python FastAPI 异步请求调度逻辑解析 在当今高并发的互联网应用中,异步编程已成为提升性能的关键技术。Python的FastAPI框架凭借其原生支持异步请求处理的能力,成为开发高效API的热门选择。本文将深入探讨FastAPI的异步请求调度逻辑,帮助开…...

别再踩坑了!SQL Server数据类型那点事儿,看懂这篇少背三个锅囱

从0构建WAV文件:读懂计算机文件的本质 虽然接触计算机有一段时间了,但是我的视野一直局限于一个较小的范围之内,往往只能看到于算法竞赛相关的内容,计算机各种文件在我看来十分复杂,认为构建他们并能达到目的是一件困难…...

寻音捉影·侠客行惊艳演示:多暗号并行扫描,3个关键词0.8秒全部锁定

寻音捉影侠客行惊艳演示:多暗号并行扫描,3个关键词0.8秒全部锁定 1. 引言:在声音的海洋里,如何快速找到那根针? 你有没有过这样的经历?手头有一段长达一小时的会议录音,老板在里面提到了一个关…...

HUNYUAN-MT 7B翻译终端与微信小程序开发结合:实现实时对话翻译工具

HUNYUAN-MT 7B翻译终端与微信小程序开发结合:实现实时对话翻译工具 你有没有遇到过这样的场景?在国外旅行,想和当地人交流却语言不通;或者工作中需要和外国同事沟通,但双方语言有障碍。这时候,一个能装在手…...

JAVA OOP概念POJO、DTO、DAO、PO、BO、VO详解

在 Java 后端开发中,面对复杂的业务场景和团队协作,如果没有清晰的数据对象分层,代码很容易变成“意大利面”——数据库字段变更影响前端接口,敏感信息意外泄露,业务逻辑与数据访问混为一谈。 今天,我们结合…...

落子珠江,新址启航|安托广州子公司盛大开业

4月10日,安托广州子公司正式揭牌。与其说是一场开业仪式,不如说是安托在华南地区的一次技术扎根。广东地区作为我国制造大省和国家数字经济创新发展试验区,正加速向“数智化韧性”跃迁。在此背景下,安托选择落子广州,不…...

手把手教你用F1C200s驱动正点原子7寸LCD屏:完整配置流程与LVGL测试

从零构建F1C200s嵌入式GUI系统:正点原子7寸屏驱动与LVGL实战指南 在嵌入式开发领域,显示界面的人机交互体验越来越受到重视。F1C200s作为一款性价比极高的国产ARM9芯片,搭配正点原子7寸LCD屏,能够构建出性能稳定、成本可控的嵌入式…...

2026届最火的降重复率方案推荐榜单

Ai论文网站排名(开题报告、文献综述、降aigc率、降重综合对比) TOP1. 千笔AI TOP2. aipasspaper TOP3. 清北论文 TOP4. 豆包 TOP5. kimi TOP6. deepseek 于学术研究范畴之内,论文AI网站已然成了提升写作效率的关键工具,这种…...