C# 装箱(Boxing)与拆箱(Unboxing)
C# 装箱(Boxing)与拆箱(Unboxing)
在 C# 中,装箱和拆箱是与值类型(如结构体)和引用类型(如类)之间的转换相关的操作。它们是类型系统的一部分,但如果不正确使用,可能会导致性能问题。以下是对装箱和拆箱的详细解释。
1. 装箱(Boxing)
1.1 定义
装箱是指将值类型(如 int、double、struct 等)转换为引用类型(如 object 或 System.ValueType)。装箱操作会创建一个对象实例,并将值类型的值复制到堆内存中。
1.2 示例代码
int num = 10; // 值类型,存储在栈内存 object obj = num; // 装箱操作:将 num 转换为 object 类型
1.3 内存分配
-
装箱操作会将值类型的值复制到堆内存中。
-
堆内存中的对象包含值类型的值,并且会占用额外的内存空间。
-
装箱操作会增加内存分配的开销。
1.4 使用场景
-
当需要将值类型作为引用类型传递时(例如,将
int转换为object)。 -
当需要将值类型存储到只能接受引用类型的集合中(如
ArrayList)。
1.5 性能影响
-
装箱操作会增加内存分配的开销,因为需要在堆上创建对象。
-
装箱操作会增加垃圾回收的负担,因为堆上的对象需要被垃圾回收器管理。
2. 拆箱(Unboxing)
2.1 定义
拆箱是指将引用类型(如 object)转换回值类型(如 int)。拆箱操作会从堆内存中提取值,并将其复制回栈内存。
2.2 示例代码
int num = 10; // 值类型 object obj = num; // 装箱操作 int unboxedNum = (int)obj; // 拆箱操作:将 object 转换回 int
2.3 注意事项
-
拆箱操作必须显式进行类型转换。
-
如果引用类型中存储的值类型与目标类型不匹配,会抛出
InvalidCastException异常。 -
拆箱操作只会成功,如果引用类型确实包含对应的值类型。
2.4 性能影响
-
拆箱操作会增加额外的内存复制开销。
-
拆箱操作需要进行类型检查,这会增加运行时的开销。
3. 装箱与拆箱的性能问题
3.1 内存分配
-
装箱操作会在堆上创建对象,增加内存分配的开销。
-
拆箱操作需要从堆内存中提取值,增加内存访问的开销。
3.2 垃圾回收
-
装箱操作会增加垃圾回收的负担,因为堆上的对象需要被垃圾回收器管理。
-
频繁的装箱和拆箱操作会导致性能下降,尤其是在高频率的循环中。
3.3 示例
以下代码展示了装箱和拆箱操作的性能问题:
int[] numbers = new int[1000000];
object[] boxedNumbers = new object[1000000];
// 装箱操作
for (int i = 0; i < numbers.Length; i++)
{boxedNumbers[i] = numbers[i]; // 每次装箱都会在堆上创建对象
}
// 拆箱操作
for (int i = 0; i < boxedNumbers.Length; i++)
{numbers[i] = (int)boxedNumbers[i]; // 每次拆箱都需要类型转换
}
-
装箱和拆箱操作会导致大量的内存分配和垃圾回收,严重影响性能。
4. 避免装箱和拆箱
4.1 使用泛型
-
泛型集合(如
List<T>)可以避免装箱和拆箱操作,因为它们直接存储值类型。 -
示例:
List<int> numbers = new List<int>(); numbers.Add(10); // 不会发生装箱
4.2 使用结构体
-
如果需要存储多个值类型,可以使用结构体而不是引用类型。
-
示例:
struct Point {public int X;public int Y; } Point p = new Point { X = 1, Y = 2 };
4.3 避免不必要的类型转换
-
在可能的情况下,直接使用值类型,避免将值类型转换为引用类型。
5. 总结
-
装箱:将值类型转换为引用类型,会增加内存分配和垃圾回收的开销。
-
拆箱:将引用类型转换回值类型,需要显式类型转换,并增加内存访问的开销。
-
性能问题:装箱和拆箱操作会显著降低性能,尤其是在高频率的循环中。
-
优化建议:优先使用泛型集合(如
List<T>),避免不必要的类型转换,减少装箱和拆箱操作。
通过理解装箱和拆箱的机制,以及它们对性能的影响,可以更好地优化代码,提高应用程序的性能。
相关文章:
C# 装箱(Boxing)与拆箱(Unboxing)
C# 装箱(Boxing)与拆箱(Unboxing) 在 C# 中,装箱和拆箱是与值类型(如结构体)和引用类型(如类)之间的转换相关的操作。它们是类型系统的一部分,但如果不正确使…...
【AD】3-10 原理图PDF导出
文件—智能PDF 多页原理图导出 导出设置时选择工程,可自行选择导出一页或多页原理图,一般PCB不用导出...
SQL命令详解之增删改数据
目录 简介 1 添加数据 1.1 基础语法 1.2 SQL 练习 2 修改数据 2.1 基础语法 2.2 SQL 练习 3 删除数据 3.1 基础语法 3.2 SQL 练习 总结 简介 在数据库操作中,增、删、改是最基础的操作,它们通常对应着SQL中的INSERT、DELETE和UPDATE命令。…...
Docker 部署 MinIO 对象存储服务
Docker 部署 MinIO 对象存储服务 前言一、准备工作1. 安装 Docker2. 确认服务器架构 二、设置 MinIO 容器的目录结构三、启动一个临时的 MinIO 容器来获取配置文件四、复制 MinIO 配置文件到本地目录五、删除临时 MinIO 容器六、创建并运行 MinIO 容器,挂载本地目录…...
IP段转CIDR:原理Java实现
🧑 博主简介:CSDN博客专家,历代文学网(PC端可以访问:https://literature.sinhy.com/#/?__c1000,移动端可微信小程序搜索“历代文学”)总架构师,15年工作经验,精通Java编…...
翻译: 深入分析LLMs like ChatGPT 一
大家好,我想做这个视频已经有一段时间了。这是一个全面但面向普通观众的介绍,介绍像ChatGPT这样的大型语言模型。我希望通过这个视频让大家对这种工具的工作原理有一些概念性的理解。 首先,我们来谈谈你在这个文本框里输入内容并点击回车后背…...
springboot之HTML与图片生成
背景 后台需要根据字段动态生成HTML,并生成图片,发送邮件到给定邮箱 依赖 <!-- freemarker模板引擎--> <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-freemarker</artifa…...
数据结构(初阶)(三)----单链表
单链表 概念 概念:链表是⼀种物理存储结构上⾮连续、⾮顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的。 结点 与顺序表不同的是,链表的结构类似于带车头的火车车厢,,链表的每个车厢都是独立…...
ChatGPT与DeepSeek:AI语言模型的巅峰对决
目录 引言 一、ChatGPT 与 DeepSeek 简介 (一)ChatGPT (二)DeepSeek 二、技术原理剖析 (一)ChatGPT 技术原理 (二)DeepSeek 技术原理 (三)技术原理对比…...
DaoCloud 亮相 2025 GDC丨开源赋能 AI 更多可能
2025 年 2 月 21 日至 23 日,上海徐汇西岸,2025 全球开发者先锋大会以 “模塑全球,无限可能” 的主题,围绕云计算、机器人、元宇宙等多元领域,探讨前沿技术创新、应用场景拓展和产业生态赋能,各类专业论坛、…...
人工智能之数学基础:线性代数中矩阵的运算
本文重点 矩阵的运算在解决线性方程组、描述线性变换等方面发挥着至关重要的作用。通过对矩阵进行各种运算,可以简化问题、揭示问题的本质特征。在实际应用中,我们可以利用矩阵运算来处理图像变换、数据分析、电路网络等问题。深入理解和掌握矩阵的运算,对于学习线性代数以…...
(上)基于机器学习的图像识别——遥感图像分类(LeNet-5;AlexNet;VGGNet;GoogLeNet;ResNet)
遥感图像识别: 专业词汇: kernel:卷积 目录 遥感图像分类 1.1 LeNet-5 视频来源: 任务:使用什么网络实现遥感图像的分类 LeNet-5结构: 遥感图像分类 1.2 AlexNet(冠军) 视频…...
数据集笔记:NUSMods API
1 介绍 NUSMods API 包含用于渲染 NUSMods 的数据。这些数据包括新加坡国立大学(NUS)提供的课程以及课程表的信息,还包括上课地点的详细信息。 可以使用并实验这些数据,它们是从教务处提供的官方 API 中提取的。 该 API 由静态的…...
HTML元素,标签到底指的哪块部分?单双标签何时使用?
1. 标签(Tag) vs 元素(Element) 标签(Tag) 标签是 HTML 中用于定义元素的符号,用尖括号 < > 包裹。例如 <img> 是标签。元素(Element) 元素是由 标签 内容…...
基于ai技术的视频生成工具
一、通用型AI视频生成工具 腾讯智影 特点:支持数字人播报、文字转视频,提供免费模板和素材库,登录即送5分钟免费时长,每日签到可兑换额外额度。 限制:免费版分辨率较低,部分高级功能需付费。 LunaAI.vid…...
【Java 后端】Restful API 接口
Restful API 接口 REST:Representational State Transfer,表现层(前端的视图页面和后端的控制层)资源状态转移。 一种软件架构的风格(格式) RESTful 是目前最流行的互联网软件架构,如果一个架…...
Matlab地图绘制教程第2期—水陆填充图
上一期分享了海岸线图的绘制方法: 本着由浅入深的理念,本期再来分享一下水陆填充图的绘制方法。 先来看一下成品效果: 特别提示:Matlab地图绘制教程系列,旨在降低大家使用Matlab进行地图类科研绘图的门槛,…...
企业知识库搭建:14款开源与免费系统选择
本文介绍了以下14 款知识库管理系统:1.Worktile;2.PingCode;3.石墨文档; 4. 语雀; 5. 有道云笔记; 6. Bitrix24; 7. Logseq等。 在如今的数字化时代,企业和团队面临着越来越多的信息…...
【Linux系统】—— 冯诺依曼体系结构与操作系统初理解
【Linux系统】—— 冯诺依曼体系结构与操作系统初理解 1 冯诺依曼体系结构1.1 基本概念理解1.2 CPU只和内存打交道1.3 为什么冯诺依曼是这种结构1.4 理解数据流动 2 操作系统2.1 什么是操作系统2.2 设计OS的目的2.3 操作系统小知识点2.4 如何理解"管理"2.5 系统调用和…...
Android内存优化指南:从数据结构到5R法则的全面策略
目录 一、APP 内存限制 二、内存的三大问题 2.1、内存抖动(Memory Churn) 2.1.1 频繁创建短生命周期对象 2.1.2 系统API或第三方库的不合理使用 2.1.3 Handler使用不当 2.2、内存泄漏(Memory Leak) 2.2.1 静态变量持有Activity或Context引用 2.2.2 未取消的回调或…...
【独家首发】保险业首个AI Agent成熟度评估模型(5级量化标准+12项KPI基线数据)
更多请点击: https://intelliparadigm.com 第一章:【独家首发】保险业首个AI Agent成熟度评估模型(5级量化标准12项KPI基线数据) 该模型由国内头部保险科技联合实验室历时18个月实证研发,首次将AI Agent在核保、理赔、…...
SEED-Lab7 XSS攻击实验(Elgg)
SEED-Lab7 XSS攻击实验(Elgg) 文章目录 SEED-Lab7 XSS攻击实验(Elgg)文章目录实验环境实验内容实验步骤DNS SetupTask 1: Posting a Malicious Message to Display an Alert WindowTask 2: Posting a Malicious Message to Display CookiesTask 3: Stealing Cookies from the…...
大学生如何学习AI智能体?从零基础到OPC一人公司
掌握AI智能体能力,是大学生未来就业和创业的核心竞争力。 在AI智能体时代,普通人若能借助模型、智能体和自动化工具完成从任务交付到产品落地的闭环,将成为稀缺人才。智能体来了旗下的OPC中国,为大学生提供了完整的学习、实训和就…...
Path of Building PoE2:终极流放之路2角色构建指南与实战教程
Path of Building PoE2:终极流放之路2角色构建指南与实战教程 【免费下载链接】PathOfBuilding-PoE2 项目地址: https://gitcode.com/GitHub_Trending/pa/PathOfBuilding-PoE2 想要在《流放之路2》中打造完美角色吗?Path of Building PoE2&#…...
终极指南:如何用Word Checker轻松实现中英文拼写自动纠正
终极指南:如何用Word Checker轻松实现中英文拼写自动纠正 【免费下载链接】word-checker 🇨🇳🇬🇧Chinese and English word spelling corrector.(中文易错别字检测,中文拼写检测纠正。英文单词拼写校验工具…...
3分钟快速优化Windows 11:免费开源工具Win11Debloat完全指南
3分钟快速优化Windows 11:免费开源工具Win11Debloat完全指南 【免费下载链接】Win11Debloat A simple, lightweight PowerShell script that allows you to remove pre-installed apps, disable telemetry, as well as perform various other changes to declutter …...
3分钟恢复Windows 11 LTSC微软商店:企业用户的完美解决方案
3分钟恢复Windows 11 LTSC微软商店:企业用户的完美解决方案 【免费下载链接】LTSC-Add-MicrosoftStore Add Windows Store to Windows 11 24H2 LTSC 项目地址: https://gitcode.com/gh_mirrors/ltscad/LTSC-Add-MicrosoftStore 还在为Windows 11 24H2 LTSC企…...
DDrawCompat终极指南:3步让老游戏在现代Windows上完美运行![特殊字符]
DDrawCompat终极指南:3步让老游戏在现代Windows上完美运行!🎮 【免费下载链接】DDrawCompat DirectDraw and Direct3D 1-7 compatibility, performance and visual enhancements for Windows Vista, 7, 8, 10 and 11 项目地址: https://git…...
极速净化Windows 11:Win11Debloat一键释放系统潜能
极速净化Windows 11:Win11Debloat一键释放系统潜能 【免费下载链接】Win11Debloat A simple, lightweight PowerShell script that allows you to remove pre-installed apps, disable telemetry, as well as perform various other changes to declutter and custo…...
3分钟免费解锁B站大会员4K视频:终极B站视频下载器完整指南
3分钟免费解锁B站大会员4K视频:终极B站视频下载器完整指南 【免费下载链接】bilibili-downloader B站视频下载,支持下载大会员清晰度4K,持续更新中 项目地址: https://gitcode.com/gh_mirrors/bil/bilibili-downloader 还在为无法下载…...
