【发布时间】:2016-11-24 01:10:21
【问题描述】:
我写了一个 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;
}
事实证明,使用元组似乎要快得多。我针对不同的列表大小(从 200,000 个元素 -> 列表中的 500 万个元素)运行了这段代码,这是我得到的结果:
我无法真正理解这一点。我怎么会有这么大的差异?使用存储相同类型对象的元组(此处为双精度)没有多大意义。我宁愿使用列表/数组来做到这一点:我做错了什么?有没有办法让案例#1 的运行速度与案例#2 一样快/快?
谢谢!
【问题讨论】:
-
为什么这令人惊讶?处理存储任意数量的对象比存储恰好存储 3 个对象需要更多的工作。
-
开销。一方面,与列表相比,您希望双精度元组占用多少空间?您希望它们在内部拥有每种类型的哪些字段?
-
将微小的差异放大到足以使它们看起来很大..