我写了一个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;
}
我比较了下面这个代码的执行速度:(由元组替换的两倍列表)
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, double>(i, 10 * i, 100 * i)
); //Populate the list with data
}
}
private List<Tuple<double, double, double>> _myListOfTuple;
}
原来,使用元组似乎要快得多。我跑这段代码的不同目录的大小(200000种元素 - 列表> 5百万元)和这里的结果我得到:
我真的不能让我的头围绕这一个。我如何得到如此显着的差异?使用一个存储相同类型对象的元组(双倍于此)没有多大意义。我宁愿使用List /数组来做到这一点:我做错了什么?有没有办法让案例#1比案例#2更快/更快地运行?
谢谢!
为什么这令人惊讶呢?处理存储任意数量的对象比存储恰好3个对象需要更多的工作。 – Servy
开销。首先,与列表相比,你会期望多少空间会占据双打的位置?对于每种类型,您希望他们在内部具有哪些字段? –
缩放甚至小的差异,足够让他们看起来很大.. – TaW