【什么是装箱和拆箱】
装箱(box)是将值类型转换为引用类型的过程,拆箱(unbox)是将引用类型转换为值类型的过程
【装箱过程】
- 先在堆上分配存储位置。(注解:引用类型的数据值放在堆中)
- 将值类型数据的值复制到分配好的储存位置
- 返回储存位置的地址(即引用)
(注解:装箱过程有分配内存和复制数据两个耗费性能(即影响程序整体性能)的操作)
【拆箱过程】
- 先检查当前的引用类型数据是否可以转换为目标值类型数据(例如,string str="123"可以转换为Int ,而str="asd"不可以)
- 复制堆中的数据的值并将复制的值放到目标数据所在的存储位置
(注解:拆箱过程有类型检查和复制数据两个操作,其中复制数据耗费性能)
【拆箱和装箱实例】
【常见的会产生装箱和拆箱的操作】
//装箱操作
int a=5;
string str="a="+5;
【如何解决拆箱和装箱引发的性能问题】
性能问题:如果装箱和拆箱进行得不是很频繁,那么性能问题不大。但有的时候,装箱很容易被忽视,而且会非常频繁地发生,这可能大幅影响性能。(对小的项目而言,我们不必要专门考虑装箱和拆箱对性能的影响,当前的计算机硬件足够强,其产生的影响可以忽略不计。平时写代码多注意下,不要忽视常见的会产生装箱和拆箱的操作的即可。)
解决方法:多使用泛型
【参考】
[1]https://blog.csdn.net/qiaoquan3/article/details/51439726
[2]《C#本质论5.0》