結果的には、
ListのRemoveAtは先頭を削除すると前詰めでo(n)の処理時間がかかるので重くなる
Dictionaryの登録時にハッシュを作る処理時間分遅くなっている。
それ以外はどれも同じぐらいだった。
1000万回繰り返したときの時間[ms]
Queue
Enqueue: 239.6727
Dequeue:142.5946
Stack
Push:147.5971
Pop:103.0714
List
Add:173.6246
RemoveAt:134.5897
Dictionary
Add.688.0982
Remove:285.1807
下はソースコード
var q = new Queue<int>();
var s = new Stack<int>();
var l = new List<int>();
var d = new Dictionary<int, int>();
var dt0 = DateTime.Now;
for (int i = 0; i < 10000000; i++)
{
q.Enqueue(i);
}
var dt1 = DateTime.Now;
Console.WriteLine($"Enqueue:{(dt1 - dt0).TotalMilliseconds}");
dt0 = DateTime.Now;
for (int i = 0; i < 10000000; i++)
{
q.Dequeue();
}
dt1 = DateTime.Now;
Console.WriteLine($"Dequeue:{(dt1 - dt0).TotalMilliseconds}");
dt0 = DateTime.Now;
for (int i = 0; i < 10000000; i++)
{
s.Push(i);
}
dt1 = DateTime.Now;
Console.WriteLine($"Push:{(dt1 - dt0).TotalMilliseconds}");
dt0 = DateTime.Now;
for (int i = 0; i < 10000000; i++)
{
s.Pop();
}
dt1 = DateTime.Now;
Console.WriteLine($"Pop:{(dt1 - dt0).TotalMilliseconds}");
dt0 = DateTime.Now;
for (int i = 0; i < 10000000; i++)
{
l.Add(i);
}
dt1 = DateTime.Now;
Console.WriteLine($"Add:{(dt1 - dt0).TotalMilliseconds}");
dt0 = DateTime.Now;
for (int i = 0; i < 10000000; i++)
{
l.RemoveAt(l.Count - 1);
}
dt1 = DateTime.Now;
Console.WriteLine($"RemoveAt:{(dt1 - dt0).TotalMilliseconds}");
dt0 = DateTime.Now;
for (int i = 0; i < 10000000; i++)
{
d[i] = i;
}
dt1 = DateTime.Now;
Console.WriteLine($"Add:{(dt1 - dt0).TotalMilliseconds}");
dt0 = DateTime.Now;
for (int i = 0; i < 10000000; i++)
{
d.Remove(i);
}
dt1 = DateTime.Now;
Console.WriteLine($"Remove:{(dt1 - dt0).TotalMilliseconds}");
0 件のコメント:
コメントを投稿