出于好奇,我想测试滴答数以比较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