在使用ArrayList这样的非泛型集合的过程中,要进行装箱和拆箱操作,会有比较大的性能损失,
而使用泛型集合就没有这样的问题。
现做一简单测试如下:
- //用来记录开始和结束的时间
- DateTime startTime = new DateTime();
- DateTime endTime = new DateTime();
- //定义集合类型ArrayList的一个实例
- ArrayList list = new ArrayList();
- //取得当前时间
- startTime = DateTime.Now;
- //★★★★★★★★①使用ArrayList类★★★★★★★★
- //ArrayList的add方法的参数是Object型,
- //当我们把int型作为参数传入的时候需要做装箱操作
- //装箱操作将值类型转化为Object类型
- for (int i = 0; i < 1000000; i++)
- {
- list.Add(i);
- }
- int iCount = 0;
- //当我们使用int型的时候需要做拆箱操作操作
- //拆箱操作将应用类型转化为Object类型,拆箱过程要做大量的工作
- foreach (int i in list)
- {
- iCount += 1;
- }
- Console.WriteLine("使用ArrayList的结果 : {0}", iCount.ToString());
- //取得结束时间并计算差值
- endTime = DateTime.Now;
- TimeSpan ts = endTime - startTime;
- Console.WriteLine("使用ArrayList的耗时 :" + ts.TotalMilliseconds);
- //★★★★★★★★②使用泛型类★★★★★★★★
- //使用List的泛型定义List<T>,int类型在编译器动态生成的类中本替换为int型
- //执行过程中不再执行装箱拆箱操作
- List<int> list2 = new List<int>();
- startTime = DateTime.Now;
- for (int i = 0; i < 1000000; i++)
- {
- list2.Add(i);
- }
- iCount = 0;
- foreach (int i in list2)
- {
- iCount += 1;
- }
- Console.WriteLine("使用泛型的结果 : {0}", iCount.ToString());
- endTime = DateTime.Now;
- ts = endTime - startTime;
- Console.WriteLine("使用泛型的耗时 :" + ts.TotalMilliseconds);
- //显示三次结果如下
- /* 第一次
- * 使用ArrayList的耗时 :92
- * 使用泛型的耗时 :25
- *
- * 第二次
- * 使用ArrayList的耗时 :96
- * 使用泛型的耗时 :22
- *
- * 第三次
- * 使用ArrayList的耗时 :90
- * 使用泛型的耗时 :22
- *
- * 由此可以明显看出两者的差别
- * 这里仅仅是时间上的,并不包括对内存消耗的统计
- *
- * ※但是也要注意到差别的单位是毫秒,
- * 我这里只想说明用泛型是有好处的,
- * 但也不可过分追求程序的孰优孰劣,
- * 总之要把握好这个度,适合自己的才是最好的
- * O(∩_∩)O~
- */
- Console.Read();