void Start() { Dictionary <int, int> dic = new Dictionary <int, int>(); for (int i = 0; i < 10000; i++) { dic.Add(i, i); } int sum = 0; // 88byte Profiler.BeginSample("values"); foreach (var e in dic.Values) { sum += e; } Profiler.EndSample(); // 88byte Profiler.BeginSample("keys"); foreach (var k in dic.Keys) { sum += dic[k]; } Profiler.EndSample(); // 64byte Profiler.BeginSample("pair"); foreach (var pair in dic) { sum += pair.Value; } Profiler.EndSample(); // 0.5KB var comp = new EnumTypeComparer(); Profiler.BeginSample("dictionary<EnumType, int>"); Dictionary <EnumType, int> dic2 = new Dictionary <EnumType, int>(comp); Profiler.EndSample(); // 488byte Profiler.BeginSample("dictionary<int, int>"); Dictionary <int, int> dic1 = new Dictionary <int, int>(); Profiler.EndSample(); // 217.3KB Profiler.BeginSample("dictionary<int, int>(10000)"); dic1 = new Dictionary <int, int>(10000); Profiler.EndSample(); // 0.5KB Profiler.BeginSample("dictionary<int, string>"); Dictionary <int, string> dic3 = new Dictionary <int, string>(); Profiler.EndSample(); // 0.5KB Profiler.BeginSample("dictionary<string, int>"); var dicsi = new Dictionary <string, int>(); Profiler.EndSample(); // 0.6KB Profiler.BeginSample("dictionary<string, string>"); Dictionary <string, string> dic4 = new Dictionary <string, string>(); Profiler.EndSample(); // 304.1KB Profiler.BeginSample("dictionary<string, string>(10000)"); dic4 = new Dictionary <string, string>(10000); Profiler.EndSample(); }
void Start() { Dictionary <int, int> dic = new Dictionary <int, int>(); for (int i = 0; i < 10000; i++) { dic.Add(i, i); } int sum = 0; // 120byte { Profiler.BeginSample("values"); foreach (var e in dic.Values) { sum += e; } Profiler.EndSample(); } // 120byte { // 72byte Profiler.BeginSample("keys get"); // new KeyCollection (24byte) Dictionary <int, int> .KeyCollection keys = dic.Keys; Profiler.EndSample(); // 48byte Profiler.BeginSample("keys foreach"); foreach (int k in keys) { sum += dic[k]; } Profiler.EndSample(); } // 0byte { Profiler.BeginSample("keys 2"); foreach (var k in dic.Keys) { sum += dic[k]; } Profiler.EndSample(); } // 96byte { Profiler.BeginSample("pair"); foreach (var pair in dic) { sum += pair.Value; } Profiler.EndSample(); } // 0byte { Profiler.BeginSample("pair 2"); foreach (var pair in dic) { sum += pair.Value; } Profiler.EndSample(); } // pairでキャッシュが生成されているため0byte Profiler.BeginSample("enemurator"); using (var itr = dic.GetEnumerator()) { while (itr.MoveNext()) { sum += itr.Current.Value; } } Profiler.EndSample(); // 80B var comp = new EnumTypeComparer(); Dictionary <EnumType, int> dic2 = new Dictionary <EnumType, int>(); Profiler.BeginSample("dictionary<EnumType, int>"); dic2 = new Dictionary <EnumType, int>(); Profiler.EndSample(); // 172B Profiler.BeginSample("dictionary<EnumType, int>.set_item"); for (int i = 0; i < 100; i++) { dic2[EnumType.A] = 0; dic2[EnumType.B] = 1; dic2[EnumType.C] = 2; } Profiler.EndSample(); { Profiler.BeginSample("dictionary<EnumType, int>.get_item"); for (int i = 0; i < 100; i++) { int dic2_0 = dic2[EnumType.A]; dic2_0 += dic2[EnumType.B]; dic2_0 += dic2[EnumType.C]; } Profiler.EndSample(); } { Profiler.BeginSample("dictionary<EnumType, int>.ContainsKey"); for (int i = 0; i < 100; i++) { if (dic2.ContainsKey(EnumType.A)) { } } Profiler.EndSample(); } { Profiler.BeginSample("dictionary<EnumType, int> foreach"); for (int i = 0; i < 100; i++) { foreach (var pair in dic2) { EnumType k = pair.Key; int v = pair.Value; } } Profiler.EndSample(); } // 80byte Dictionary <int, int> dic1 = new Dictionary <int, int>(); Profiler.BeginSample("dictionary<int, int>"); dic1 = new Dictionary <int, int>(); Profiler.EndSample(); // 0.8KB { Profiler.BeginSample("dictionary<string, int> x10"); for (int i = 0; i < 10; i++) { var t = new Dictionary <string, int>(); } Profiler.EndSample(); } // 2.2KB { Profiler.BeginSample("dictionary<string, int>(1) x10"); for (int i = 0; i < 10; i++) { // 80 var t = new Dictionary <string, int>(); // 44 + 104 t.Add("a", i); } Profiler.EndSample(); } Profiler.BeginSample("dictionary<int, int>.set_item"); for (int i = 0; i < 100; i++) { dic1[0] = 0; dic1[1] = 1; dic1[2] = 2; } Profiler.EndSample(); { Profiler.BeginSample("dictionary<int, int>.get_item"); for (int i = 0; i < 100; i++) { int dic1_0 = dic1[0]; dic1_0 += dic1[1]; dic1_0 += dic1[2]; } Profiler.EndSample(); } // 217.3KB Profiler.BeginSample("dictionary<int, int>(10000)"); dic1 = new Dictionary <int, int>(10000); Profiler.EndSample(); // 0.5KB Profiler.BeginSample("dictionary<int, string>"); Dictionary <int, string> dic3 = new Dictionary <int, string>(); Profiler.EndSample(); // 0.5KB Profiler.BeginSample("dictionary<string, int>"); var dicsi = new Dictionary <string, int>(); Profiler.EndSample(); // 0.6KB Profiler.BeginSample("dictionary<string, string>"); Dictionary <string, string> dic4 = new Dictionary <string, string>(); Profiler.EndSample(); // 304.1KB Profiler.BeginSample("dictionary<string, string>(10000)"); dic4 = new Dictionary <string, string>(10000); Profiler.EndSample(); // 234.6KB Profiler.BeginSample("reset dictionary (ToArray)"); //foreach (var key in dic.Keys.to) { // dic[key] = 0; } Profiler.EndSample(); // 234.6KB Profiler.BeginSample("reset dictionary (new List)"); foreach (var key in new List <int>(dic.Keys)) { dic[key] = 0; } Profiler.EndSample(); Profiler.BeginSample("reset dictionary (values)"); Profiler.EndSample(); // 96B { Profiler.BeginSample("readonly dictionary"); var rodic = new System.Collections.ObjectModel.ReadOnlyDictionary <int, int>(dic); foreach (var e in rodic) { sum += e.Value; } Profiler.EndSample(); } // 48B { Profiler.BeginSample("readonly dictionary 2"); IReadOnlyDictionary <int, int> rodic = dic; foreach (var e in rodic) { sum += e.Value; } Profiler.EndSample(); } { Profiler.BeginSample("readonly dictionary 3"); IReadOnlyDictionary <int, int> rodic = dic; foreach (var e in rodic) { sum += e.Value; } Profiler.EndSample(); } // 480byte { Profiler.BeginSample("IDictionary<int, int>"); for (int i = 0; i < 10; i++) { IDictionary <int, int> rodic = dic; foreach (var e in rodic) { sum += e.Value; } } Profiler.EndSample(); } for (int i = 0; i < 100; i++) { dic4.Add(i.ToString(), i.ToString()); } // おそらくKeyValuePairがボックス化される // 3.2KB { Profiler.BeginSample("IDictionary foreach"); IDictionary idic = dic4; foreach (var e in idic) { } Profiler.EndSample(); } { Profiler.BeginSample("Dictionary get_item"); for (int i = 0; i < 10000; i++) { if (dic4.ContainsKey("99")) { var s = dic4["99"]; } } Profiler.EndSample(); } { Profiler.BeginSample("IDictionary get_item"); IDictionary idic = dic4; for (int i = 0; i < 10000; i++) { if (idic.Contains("99")) { var s = idic["99"]; } } Profiler.EndSample(); } { SortedDictionary <string, string> sortedDcit = new SortedDictionary <string, string>(); sortedDcit.Add("a", "a"); sortedDcit.Add("b", "b"); sortedDcit.Add("c", "c"); foreach (var pair in sortedDcit) { } // 120byte Profiler.BeginSample("SortedDictionary foreach"); foreach (var pair in sortedDcit) { } Profiler.EndSample(); } { Profiler.BeginSample("Dictionary<string, int>.ctor"); Dictionary <string, int> d = new Dictionary <string, int>(10000); Profiler.EndSample(); for (int i = 0; i < 1000; i++) { d.Add(i.ToString(), i); } Profiler.BeginSample("Dictionary<string, int>.get"); for (int i = 0; i < 10000; i++) { string k = "500"; int v = d[k]; v += d[k]; } Profiler.EndSample(); } { Profiler.BeginSample("Dictionary<object, int>.ctor"); Dictionary <object, int> d = new Dictionary <object, int>(10000); Profiler.EndSample(); for (int i = 0; i < 1000; i++) { d.Add(i.ToString(), i); } Profiler.BeginSample("Dictionary<object, int>.get"); for (int i = 0; i < 10000; i++) { string k = "500"; int v = d[k]; v += d[k]; } Profiler.EndSample(); } }