C#装箱和拆箱(装箱和拆箱对应用程序性能的影响)
2012-11-24 19:22
405 查看
一、装箱和拆箱到底是什么?
装箱(box):把值类型对象转为引用类型的对象;
拆箱(unbox):把引用类型对象转为值类型的对象。
二、装箱和拆箱的实际运用
下面是我们常写的代码,那么在这个过程中,装箱和拆箱到底是怎么转换的呢?
int n = 2;
object obj = (object)n;//装箱,把数值类型int转换为引用类型object对象的。
int m = (int)obj;//拆箱,把引用类型的object转换为int类型。
我们可以看看C#代码被编译为中间语言IL,就很清楚装箱和拆箱的过程:
三、实际编码过程中到底哪些是装箱和拆箱呢?
1、引用类型之间不属于装箱和拆箱,装箱、拆箱必须是: 值类型→引用类型 或 引用类型→值类型。
Person p=new Student();//这个叫隐式类型转换,不叫装箱。
Student stu=(Student)p;//这个叫显示类型转换,不叫拆箱。
2、方法重载时,如果具有该类型的重载,那么就不叫拆箱或装箱。
int n=10; Console.WriteLine(n);//没有发生装箱,因为方法重载。
3、接口与值类型之间的装箱与拆箱。
int n = 2;
IComparable c = n;
int m = (int)c;
Console.WriteLine(m.ToString());
四、频繁装箱和拆箱会对程序性能造成什么影响?
频繁的拆箱和装箱会对系统性能造成什么影响?下面我们就从运行时间方面对其性能进行分析,
从上面运行的时间我们可以清楚的看出频繁的进行装箱和拆箱对引用程序运行的时间有很大的区别,因此,要写一个高效的高性能的软件,要注意装箱和拆箱对应用程序造成的影响。
装箱(box):把值类型对象转为引用类型的对象;
拆箱(unbox):把引用类型对象转为值类型的对象。
二、装箱和拆箱的实际运用
下面是我们常写的代码,那么在这个过程中,装箱和拆箱到底是怎么转换的呢?
int n = 2;
object obj = (object)n;//装箱,把数值类型int转换为引用类型object对象的。
int m = (int)obj;//拆箱,把引用类型的object转换为int类型。
我们可以看看C#代码被编译为中间语言IL,就很清楚装箱和拆箱的过程:
三、实际编码过程中到底哪些是装箱和拆箱呢?
1、引用类型之间不属于装箱和拆箱,装箱、拆箱必须是: 值类型→引用类型 或 引用类型→值类型。
Person p=new Student();//这个叫隐式类型转换,不叫装箱。
Student stu=(Student)p;//这个叫显示类型转换,不叫拆箱。
2、方法重载时,如果具有该类型的重载,那么就不叫拆箱或装箱。
int n=10; Console.WriteLine(n);//没有发生装箱,因为方法重载。
3、接口与值类型之间的装箱与拆箱。
int n = 2;
IComparable c = n;
int m = (int)c;
Console.WriteLine(m.ToString());
四、频繁装箱和拆箱会对程序性能造成什么影响?
频繁的拆箱和装箱会对系统性能造成什么影响?下面我们就从运行时间方面对其性能进行分析,
从上面运行的时间我们可以清楚的看出频繁的进行装箱和拆箱对引用程序运行的时间有很大的区别,因此,要写一个高效的高性能的软件,要注意装箱和拆箱对应用程序造成的影响。
相关文章推荐
- .NET.性能:装箱与拆箱、string stringBuilder、struct class、Add AddRangle等影响性能分析
- c#中装箱拆箱性能测试
- C#与.NET程序员面试宝典 3.1.3 面试题22:如何解决装箱和拆箱引发的性能问题
- 读书笔记-C#中装箱拆箱性能
- C# 拆箱与装箱 要严格控制,数量多起来严重影响效率
- .Net 基础概念 堆与栈、值类型与引用类型、装箱与拆箱性能影响
- .NET.性能:装箱与拆箱、string stringBuilder、struct class、Add AddRangle等影响性能分析
- C# 程序性能提升篇-1、装箱和拆箱,枚举的ToString浅析
- C#装箱拆箱性能认识
- Java 性能笔记:自动装箱/拆箱
- 【转】C#装箱与拆箱
- c# 装箱和拆箱
- C#装箱与拆箱
- C#装箱和拆箱原理详解
- c# 装箱与拆箱问题
- C#装箱与拆箱
- C#“装箱”(boxing)与“拆箱”(unboxing)
- C#“装箱”(boxing)与“拆箱”(unboxing)
- C# 装箱 拆箱 泛型
- 「转载」C#装箱与拆箱