.NET中六个你必须知道的重要概念之装箱(boxing)和拆箱(unboxing)
来源:互联网 发布:网页菜单制作软件 编辑:程序博客网 时间:2024/05/17 00:51
说了这么多,在实际编程时怎么使用它们呢?最大的问题是要弄清楚数据从堆栈移到堆的性能损失,反之亦然。
如下图所示,当我们将一个值类型移到引用类型时,数据也从堆栈移到堆中,当我们将引用类型移到值类型时,数据就从堆移到堆栈中。数据从堆栈移到堆,或是从堆移到堆栈,都会产生较大的性能损失。数据从值类型移到引用类型的过程叫做装箱,从引用类型移到值类型叫做拆箱。
图 8 装箱和拆箱过程示意
如果你编译上面的代码,在相同的ILDASM中,你会看到在IL中的代码是如何装箱和拆箱的,如下图所示。
图9 装箱和拆箱
装箱和拆箱的性能影响
为了查看性能的影响,我们将下面两个函数运行了1000次,如下图所示,左边的函数有装箱拆箱操作,右边的函数没有,我们使用了一个秒表对象监控所花的时间。
图10 有装箱拆箱和无装箱拆箱执行时间对比
从上图我们看到,有装修拆箱需要花3542毫秒,无装修拆箱只需2477毫秒,因此对性能的影响还是蛮大的。
现在你对这两个重要的.Net概念是否都理解了呢?
- .NET中六个你必须知道的重要概念之装箱(boxing)和拆箱(unboxing)
- .NET中六个你必须知道的重要概念之堆栈(stack)和堆(heap)
- .NET中六个你必须知道的重要概念之值类型和引用类型
- 装箱和拆箱(boxing&unboxing)-.NET
- C#中装箱和拆箱的作用 the effection of boxing and unboxing
- 【译】.NET中六个重要的概念:栈、堆、值类型、引用类型、装箱和拆箱
- 【译】.NET中六个重要的概念:栈、堆、值类型、引用类型、装箱和拆箱
- C#装箱和拆箱(Boxing 和 UnBoxing)
- 装箱(Boxing)和拆箱(Unboxing)
- 装箱(Boxing)和拆箱(Unboxing)
- [转]装箱(Boxing)和拆箱(Unboxing)
- 装箱(boxing)和拆箱(unboxing)
- C#装箱(Boxing)和拆箱(Unboxing)
- C#——装箱(boxing)和拆箱(unboxing)
- java 自动拆箱(unboxing)和自动装箱(boxing)
- C#中的装箱(Boxing)和拆箱(Unboxing)
- 自动装箱(boxing)和自动拆箱(unboxing)
- 装箱(boxing)和拆箱(unboxing) [转]
- Linux fork返回值
- 数据结构----二叉树遍历的非递归算法实现
- 关于ByteBuffer
- 【物联网智能网关-15】WAV播放器(WinForm+WavPlay库实例)
- [C++]数据结构:算法分析之八皇后问题
- .NET中六个你必须知道的重要概念之装箱(boxing)和拆箱(unboxing)
- Spring事务-所有客户端代码
- hdu 2044 一只小蜜蜂
- SSH和dwr整合实现在同一个页面的增加修改时id不一致的问题
- udp通信简单实例
- FAQ_22 Cursor 遍历数据库
- poj 3061(高效枚举)
- windows8开发-使用工作线程与更新UI
- 解决ld: cannot find -lXX之类的问题