結果的には、
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 件のコメント:
コメントを投稿