C#中的装箱,拆箱操作过程随处可见,装箱:将一个值类型转换成一个oject类型;拆箱:将一个object类型转换成值类型。装箱也就是创建了一个object实例,并将这个值复制给这个object,装箱后object对象中的数据存放在托管堆中,托管堆的地址放在堆栈中,是作为一个复制文件赋值给对象的。
装箱和拆箱需要进行大量计算,对值类型装箱需要分配一个全新的对象,次之,取消装箱也需要进行大量的计算,减少装箱和拆箱操作对应用程序的性能有很好的途径。所以在.NET Framework 2.0时候微软推出泛型,他有效的解决了这个性能的问题。
![ContractedBlock.gif](https://i-blog.csdnimg.cn/blog_migrate/8f900a89c6347c561fdf2122f13be562.gif)
![ExpandedBlockStart.gif](https://i-blog.csdnimg.cn/blog_migrate/961ddebeb323a10fe0623af514929fc1.gif)
1
class
Program
2 {
3 static void Main( string [] args)
4 {
5 RunBox();
6 RunNoBox();
7 }
8 /// <summary>
9 /// 装箱
10 /// </summary>
11 public static void RunBox()
12 {
13 DateTime startTime = DateTime.Now;
14 ArrayList list = new ArrayList();
15 for ( int i = 0 ; i < 5 ; i ++ )
16 {
17 list.Clear();
18 for ( int j = 0 ; j < 5000000 ; j ++ )
19 {
20 list.Add(j);
21 }
22 int k;
23 for ( int j = 0 ; j < list.Count; j ++ )
24 {
25 k = ( int )list[i];
26 }
27 }
28 DateTime endTime = DateTime.Now;
29 Console.WriteLine( " 开始时间,结束时间,耗费时间 " + startTime.ToString() + " , " + endTime.ToString() + " ,' " + (endTime - startTime).ToString());
30 }
31 /// <summary>
32 /// 拆箱
33 /// </summary>
34 public static void RunNoBox()
35 {
36 DateTime startTime = DateTime.Now;
37 List < int > list = new List < int > ();
38 for ( int i = 0 ; i < 5 ; i ++ )
39 {
40 list.Clear();
41 for ( int j = 0 ; j < 5000000 ; j ++ )
42 {
43 list.Add(j);
44
45 }
46 int k;
47 for ( int j = 0 ; j < list.Count; j ++ )
48 {
49 k = list[j];
50
51 }
52
53 }
54 DateTime endTime = DateTime.Now;
55 Console.WriteLine( " 开始时间,结束时间,耗费时间 " + startTime.ToString() + " , " + endTime.ToString() + " ,' " + (endTime - startTime).ToString());
56 }
57 }
58 }
2 {
3 static void Main( string [] args)
4 {
5 RunBox();
6 RunNoBox();
7 }
8 /// <summary>
9 /// 装箱
10 /// </summary>
11 public static void RunBox()
12 {
13 DateTime startTime = DateTime.Now;
14 ArrayList list = new ArrayList();
15 for ( int i = 0 ; i < 5 ; i ++ )
16 {
17 list.Clear();
18 for ( int j = 0 ; j < 5000000 ; j ++ )
19 {
20 list.Add(j);
21 }
22 int k;
23 for ( int j = 0 ; j < list.Count; j ++ )
24 {
25 k = ( int )list[i];
26 }
27 }
28 DateTime endTime = DateTime.Now;
29 Console.WriteLine( " 开始时间,结束时间,耗费时间 " + startTime.ToString() + " , " + endTime.ToString() + " ,' " + (endTime - startTime).ToString());
30 }
31 /// <summary>
32 /// 拆箱
33 /// </summary>
34 public static void RunNoBox()
35 {
36 DateTime startTime = DateTime.Now;
37 List < int > list = new List < int > ();
38 for ( int i = 0 ; i < 5 ; i ++ )
39 {
40 list.Clear();
41 for ( int j = 0 ; j < 5000000 ; j ++ )
42 {
43 list.Add(j);
44
45 }
46 int k;
47 for ( int j = 0 ; j < list.Count; j ++ )
48 {
49 k = list[j];
50
51 }
52
53 }
54 DateTime endTime = DateTime.Now;
55 Console.WriteLine( " 开始时间,结束时间,耗费时间 " + startTime.ToString() + " , " + endTime.ToString() + " ,' " + (endTime - startTime).ToString());
56 }
57 }
58 }