C#中泛型效率对比(ArrayList和List)

泛型一般效率比较高,因为它的操作并不是装箱拆箱,也不涉及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类型来处理,不涉及装箱和拆箱,所以效率相对较高。

发布了50 篇原创文章 · 获赞 0 · 访问量 865

猜你喜欢

转载自blog.csdn.net/weixin_40786497/article/details/104137998
今日推荐