装箱与拆箱之性能损耗

装箱:值类型转换为引用类型。拆箱:引用类型转换为值类型。

在.net编程中,我们经常会遇到一些string转int,或者int转string的事情,做财务和绩效系统的时候为了便于对象映射或前后端便于传参将float(或double,int)转string的案例,在这些转换过程是否存在性能损耗?为什么装箱和拆箱会影响到程序的性能呢?

第一步:首先需要了解.net中哪些是值类型和哪些是引用类型:

值类型:int(整数),float(单精度浮点),double(双精度浮点),decimal(高精度浮点),char(字符),bool(布尔),struck(结构),enum(枚举)

引用类型:object(对象),string(字符串),class(类),interface(接口),Delegate(委托),Array(数组)

其中int,float,double,decimal,char,bool,object,string是预定义的类型;struck,enum,class,interface,Delegate,Array是复合类型。

第二步:了解值类型和引用类型在内存(栈和堆)中的存放位置

值类型一般存放在内存的栈上,引用类型一般存放在内存的堆上。例,int a=1;int b=2;int[] arr=new int[3],下面两张图可以说明Array的存储位置。虽然arr在栈上,但栈上没有  存放arr的内容,内容在堆上存放,栈上存放的是arr和一个堆的地址0x0011。

 

第三步:实例说明,方法穿参数循环一千万次,第1种:int类型=》int类型;第2种:int类型=》object类型;第3种:int类型=》T泛型

 输出:

 总结:当数据量达到一定量的时候,编写程序的时大量的使用装箱或者拆箱,会影响程序的性能。

解决方案:1.尽量少写装箱和拆箱代码;2.使用泛型代替原有参数传递或者类型转换。

猜你喜欢

转载自www.cnblogs.com/sunshine2011boy/p/13179520.html