出於好奇,我想測試滴答數以比較GenericList和ArrayList。爲什麼簡單列表<T>似乎比ArrayList慢?
對於下面的代碼,當我檢查秒錶時,ArrayList似乎更快。
我做錯了什麼或者是否有解釋? (我相信名單STO快很多)
Tesing代碼及以下輸出:
private static void ArrayListVsGenericList()
{
// Measure for ArrayList
Stopwatch w0 = new Stopwatch();
w0.Start();
ArrayList aList = new ArrayList();
for (int i = 0; i < 1001; i++)
{
Point p = new Point();
p.X = p.Y = i;
aList.Add(p);
}
foreach (Point point in aList)
{
int v0 = ((Point) aList[8]).X; //unboxing
}
w0.Stop();
// Measure for Generic List<Point>
Stopwatch w1 = new Stopwatch();
w1.Start();
List<Point> list = new List<Point>();
for (int i = 0; i < 1001; i++)
{
Point p = new Point();
p.X = p.Y = i;
list.Add(p);
}
foreach (var point in list)
{
int v1 = list[8].X;
}
w1.Stop();
Console.WriteLine("Watch 0 : " + w0.ElapsedTicks);
Console.WriteLine("Watch 1 : " + w1.ElapsedTicks);
Console.WriteLine("Watch 0 > Watch 1 : " + (w0.ElapsedTicks > w1.ElapsedTicks));
}
我不認爲這個測試是可靠的。代碼執行的順序很重要,首先。在第二個列表中添加可能會受到之前分配的影響。還有1000個元素是一個小集合。你應該在兩個不同的程序中將填充和獲得兩種列表分開,然後使用探查器對它們進行測試,而不是使用秒錶。 – vulkanino 2012-03-05 08:40:03
當使用int而不是'Point'時它看起來如何?首先測試通用列表? – 2012-03-05 08:41:38
那麼,當我增加元素數量到1000001泛型更快。但是這是否意味着在處理一小組元素時,泛型不能被認爲是最快的? – pencilCake 2012-03-05 08:43:05