我写了一个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更快/更快的速度运行?
谢谢!
解决方法
新元组< 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; }
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++; }
运行更多代码,执行速度更慢.非常简单..
原文地址:https://www.jb51.cc/csharp/243894.html
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。