装箱:将值类型转换为引用类型
拆箱:将引用类型转换为值类型
值类型:int double decimal enum struct bool char ...
引用类型:数组 集合 自定义类 string object...
装箱和拆箱会对系统消耗很大, 下面我们通过代码来看一下,
ArrayList listArr = new ArrayList();
Stopwatch sw = new Stopwatch();
sw.Start();
for (int i = 0; i < 10000000; i++)
{
listArr.Add(i);//装箱
}
sw.Stop();
Console.WriteLine(sw.Elapsed); //获取运行的时间
Console.ReadKey();

向ArrayList集合中添加数据的类型是object,也就是说是将 值类型转换为引用类型, 是进行了装箱操作,上面的代码进行了一千万次装箱操作,共耗时2秒多,
下面来看一个没有装箱或者拆箱的操作
List<int> list = new List<int>();
Stopwatch sw = new Stopwatch();
sw.Start();
for (int i = 0; i < 10000000; i++)
{
list.Add(i);
}
sw.Stop();
Console.WriteLine(sw.Elapsed); //获取运行的时间
Console.ReadKey();

由于list泛型集合中指定了数值类型, 所以没有进行拆箱装箱操作, 时间只用了上面操作的十分之一而已, 所以说,频繁的装箱和拆箱对系统的消耗很大,
注:
我们看两个类型之间是否发生装箱或者拆箱,首先要确定这两个类型之间是否存在继承关系。
如果存在,则有可能会发生拆箱或者装箱,
如果不存在继承关系,则不会发生装箱或者拆箱。
注意:装箱的时候使用什么类型装的箱,拆的时候也得使用对应的类型进行拆箱。(里氏转换)
本文探讨了值类型与引用类型的装箱和拆箱过程,通过对比不同集合类型的性能表现,说明频繁装箱拆箱对系统性能的影响,并提供了具体的代码案例。
171

被折叠的 条评论
为什么被折叠?



