static void Main() { const int N = 10000; { var q = new Quartet(1, 2, 3, 4); var begin = GC.GetTotalMemory(false); var sum = 0; for (int i = 0; i < N; i++) { foreach (var x in q) { sum += x; } } var end = GC.GetTotalMemory(false); Console.WriteLine($"struct: {end - begin}"); // 0 って出るはず } { var q = new Quartet(1, 2, 3, 4); var begin = GC.GetTotalMemory(false); var sum = 0; for (int i = 0; i < N; i++) { sum += Sum(q); // ジェネリックを介せばボックス化は起きない } var end = GC.GetTotalMemory(false); Console.WriteLine($"generics: {end - begin}"); // GetEnumerator のボックス化のみ } }
public Enumerator(Quartet quintet) { _items = quintet; _i = 0; }