泛型一般效率比较高,因为它的操作并不是装箱拆箱,也不涉及object类型转换。
下面的一段程序主要测试泛型列表List与数组列表ArayList之间的性能对比。这两种都可以创建列表,且都可以面对不同的数据类型。泛型的数据类型编程中指定。ArrayList类型为object类,会进行数据的装箱和拆箱。
using System;
using System.Collections.Generic; //使用泛型类必须引用空间
using System.Linq;
using System.Text;
using System.Text.RegularExpressions;
using System.Threading.Tasks;
using System.Collections;
using System.Diagnostics; //使用时间计时必须引用此空间
namespace TESTT
{
class Program
{
public static void TestNonGeneric()
{
Stopwatch sw = new Stopwatch(); //计时器
List<int> list = new List<int>(); //声明List泛型对象,类型为int
sw.Start(); //开始计时
for (int i = 0; i < 10000000; i++)
{
list.Add(i); //添加数据,不涉及装箱拆箱和数据转换
}
sw.Stop(); //计时停止
TimeSpan ts = sw.Elapsed; //获取计时的时间,用TimeSpan类,TimeSpan类会将计时的毫秒数字转换为常见的时分秒毫秒等单位
Console.WriteLine("time1 is{0:00},{1:00},{2:00},{3:00}",ts.Hours,ts.Minutes,ts.Seconds,ts.Milliseconds/10);//输出时间
ArrayList al = new ArrayList(); //声明一个ArrayList类
sw.Restart(); //计时器重新开始,并把时间值置位0
for (int i = 0; i < 10000000; i++)
{
al.Add(i); //添加数据
}
sw.Stop(); //计时停止
TimeSpan ts2 = sw.Elapsed; //获取时间
Console.WriteLine("time2 is{0:00},{1:00},{2:00},{3:00}", ts2.Hours, ts2.Minutes, ts2.Seconds, ts2.Milliseconds / 10);
}
static void Main(string[] args)
{
TestNonGeneric(); //运行
Console.ReadKey();
}
}
}
经过上述的运行后可以发现,采用泛型List定义的列表处理的时间大约为16毫秒。
采用ArrayList定义的列表处理的时间大约为1秒34毫秒。显然ArrayList处理的结果比较差。
归根原因是因为ArrayList内部采用的是object类型,所以它能面对各种不同数据类型。但这其中涉及到了装箱和拆箱,所以效率低。
而List泛型,因为已经确定了数据类型就是int,所以操作过程中就按照int类型来处理,不涉及装箱和拆箱,所以效率相对较高。