装箱与拆箱以及性能损失

先分析一下值类型与引用类型

值类型:      Int32 i =4; 【变量i是值类型,被分配在栈上,变量包含变量实例,使用效率高】

引用类型:   object o = i; 【变量o是引用类型,被分配在托管堆,变量包含实例的指针,通过此指针引用其实例】

引用类型性能要比值类型差很多,因此尽量使用值类型,而少使用引用类型。

装箱

Int32 i =4;  定义一个值类型

objct o = i; [装箱]这个值类型被复制并分配到托管堆,并把它转成引用类型O,这一个过程将会造成性能损失。

拆箱

Int32 i =4;  定义一个值类型

objct o = i; 转成引用类型O

Int32 n = (Int32)O;[拆箱]将托管堆中的引用类型实例复制到栈中,转为值类型n

由此可见,装箱和拆箱是要尽量避免的操作。

同时,尽可能少用Array,它的ADD操作会将值类型变量转为引用类型,而泛型List则不会,它是一个增强版的Array,它可以直接添加值类型到List中。

Int32 i = 4;  定义值类型
 
Array a = new Array(); 定义一个集合

a.Add(i); 将值类型加入集合中,但是这一个过程会发生装箱。
原文地址:https://www.cnblogs.com/baobao2010/p/1784309.html