好奇心を要しない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));
}
私はこの試験が信頼できるとは思わない。まず、コードの実行順序が重要です。 2番目のリストに追加すると、以前の割り当てが犠牲になることがあります。また、1000個の要素は小さなセットです。 2つの異なるプログラムで2種類のリストの塗りつぶしと取り出しを分離してから、ストップウォッチではなくプロファイラーを使用してテストする必要があります。 – vulkanino
''ポイント ''の代わりに '' int''を使用するとどうなりますか?最初にジェネリックリストをテストするときは? –
まあ、要素数を1000001に増やすとジェネリックスが速くなりました。しかし、これは、ジェネリックスが小さなセットの要素に取り組んでいるとき、最も速く考えることができないということですか? – pencilCake