我寫了一個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