加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c# – 为什么一个简单的List似乎比ArrayList慢?

发布时间:2020-12-15 07:59:32 所属栏目:百科 来源:网络整理
导读:出于好奇,我想测试将GenericList与ArrayList进行比较的刻度数. 对于下面的代码,当我检查秒表时,ArrayList似乎更快. 我做错了还是有解释? (我相信List会更快) 测试代码和输出如下: private static void ArrayListVsGenericList(){ // Measure for ArrayList
出于好奇,我想测试将GenericList与ArrayList进行比较的刻度数.

对于下面的代码,当我检查秒表时,ArrayList似乎更快.

我做错了还是有解释? (我相信List会更快)

测试代码和输出如下:

private static void ArrayListVsGenericList()
{
    // Measure for ArrayList
    Stopwatch w0 = new Stopwatch();
    w0.Start();

    ArrayList aList = new ArrayList();

    for (int i = 0; i < 1001; i++)
    {
        Point p = new Point();
        p.X = p.Y = i;

        aList.Add(p);
    }

    foreach (Point point in aList)
    {
        int v0 = ((Point) aList[8]).X; //unboxing
    }


    w0.Stop();

    // Measure for Generic List<Point>
    Stopwatch w1 = new Stopwatch();
    w1.Start();

    List<Point> list = new List<Point>();

    for (int i = 0; i < 1001; i++)
    {
        Point p = new Point();
        p.X = p.Y = i;

        list.Add(p); 
    }


    foreach (var point in list)
    {
        int v1 = list[8].X;
    }

    w1.Stop();

    Console.WriteLine("Watch 0 : " + w0.ElapsedTicks);
    Console.WriteLine("Watch 1 : " + w1.ElapsedTicks);
    Console.WriteLine("Watch 0 > Watch 1 : " + (w0.ElapsedTicks > w1.ElapsedTicks));
}

解决方法

更改测试程序以至少运行两次方法并忽略第一次运行.结果是由具体类型List< Point>的代码生成和jitting引起的.

在我的机器上,这导致以下输出:

Watch 0 : 154
  Watch 1 : 74
  Watch 0 > Watch 1 : True

这几乎是人们所期望的.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读