装箱与拆箱以及性能损失

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

值类型:      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/archive/2010/07/24/1784309.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值