c# – 为什么在这个例子中使用比元组更快的元组?

c# – 为什么在这个例子中使用比元组更快的元组?,第1张

概述我写了一个C#类,用一些数据填充“双打列表列表”(无论数据是什么,现在它可能只是一些垃圾:)),用于测试目的: 这是代码: class test { public test() { _myListOfList = new List<List<double>>(1000000); } public void Run() { 我写了一个C#类,用一些数据填充“双打列表列表”(无论数据是什么,现在它可能只是一些垃圾:)),用于测试目的:

这是代码:

class test    {    public test()    {       _mylistofList = new List<List<double>>(1000000);    }    public voID Run()    {        for (int i = 0; i < _mylistofList.Capacity; i++)        {            _mylistofList.Add(                new List<double>(3) { i,10*i,100*i}                ); //Populate the List with data        }    }    private List<List<double>> _mylistofList;}

我将此代码的执行速度与以下内容进行了比较:(用元组替换double的列表)

class test    {    public test()    {       _mylistofTuple = new List<Tuple<double,double,double>>(1000000);    }    public voID Run()    {        for (int i = 0; i < _mylistofTuple.Capacity; i++)        {            _mylistofTuple.Add(                new Tuple<double,double>(i,10 * i,100 * i)                ); //Populate the List with data        }    }    private List<Tuple<double,double>> _mylistofTuple;}

事实证明,使用元组似乎要快得多.我为不同的List大小运行了这段代码(从200,000个元素 – 列表中的> 5百万个元素),这是我得到的结果:

我无法真正理解这一点.为什么我会有如此显着的差异?使用存储相同类型对象的元组(这里加倍)并没有多大意义.我宁愿使用List /数组来做到这一点:我做错了什么?是否有一种方法可以使案例#1以比案例#2更快/更快的速度运行?

谢谢!

@H_403_16@解决方法 新元组< double,100 * i)和新List< double>(3){i,100 * i}之间存在差异.

第一个是超级简单 – 只有3个任务:

public Tuple(T1 item1,T2 item2,T3 item3) {    m_Item1 = item1;    m_Item2 = item2;    m_Item3 = item3;}

第二个实际上是由编译器转换为3个Add方法调用:

var temp = new List<double>(3);temp.Add(i);temp.Add(10 * i);temp.Add(100 * i);

添加不仅仅是一项任务:

public voID Add(T item) {    if (_size == _items.Length) EnsureCapacity(_size + 1);    _items[_size++] = item;    _version++;}

运行更多代码,执行速度更慢.非常简单..

@H_403_16@ @H_403_16@ 总结

以上是内存溢出为你收集整理的c# – 为什么在这个例子中使用比元组更快的元组?全部内容,希望文章能够帮你解决c# – 为什么在这个例子中使用比元组更快的元组?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/langs/1250021.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-06-07
下一篇2022-06-07

发表评论

登录后才能评论

评论列表(0条)

    保存