using System;
using System.Collections.Generic;
using System.Text;
using System.Collections;
using System.Diagnostics;
namespace 装箱拆箱性能问题
{
/// <summary>
/// @auhtor ZJC
/// 1.装箱:值类型 → 引用类型
/// 2.拆箱:引用类型 → 值类型
/// 平时写代码要尽量避免装箱拆箱,因为对性能影响很大。
/// </summary>
class Program
{
static void Main(string[] args)
{
#region 1.初识装箱拆箱
int n = 10;
object obj = n; //装箱
int m = (int)obj; //拆箱
Console.WriteLine(obj +"\n"+ n);
//注意这样也是发生了装箱的:
IComparable com = n; //发生了装箱
m = (int)com; //拆箱
#endregion
#region 2.装箱拆箱性能测试
Console.WriteLine("2.装箱拆箱性能测试: ");
//ArrayList list = new ArrayList();
//Stopwatch watch = new Stopwatch();
//watch.Start();
//for (int i = 0; i < 30000000; i++)
//{
// list.Add(i); //ArrayList集合,每次增加一个数字都会发生装箱操作,因为发生了从int到object的转换
//}
List<int>list = new List<int>();
Stopwatch watch = new Stopwatch();
for (int i = 0; i < 30000000; i++)
{
list.Add(i); //使用泛型集合,省去了装箱拆箱操作,性能大大提升
}
watch.Stop();
Console.WriteLine(watch.Elapsed);
#endregion
}
}
}
发生装箱运行结果:
未发生装箱运行结果:
可见装箱操作对性能影响非常之大!