Seasons.NET

ちょっとした技術ブログです

GCの世代サンプル

GCの仕組みを知る為のサンプル
Collectの後にオブジェクトのGC.Generationが昇格する。

 1 using System;
 2 using System.Collections.Generic;
 3 using System.Text;
 4 
 5 namespace GCSample01
 6 {
 7     class Program
 8     {
 9         class Hoge
10         {
11             private string name = "hoge";
12 
13             public string Name
14             {
15                 get { return name; }
16             }
17 
18             ~Hoge()
19             {
20                 Console.WriteLine("Called Finalized!!");
21             }
22         }
23         static void Collect(int maxGen)
24         {
25             GC.Collect();
26             Console.WriteLine("\tGC.Collect");
27         }
28         static void Main(string[] args)
29         {
30             Hoge h = new Hoge();
31 
32             Console.WriteLine(h.Name.ToString());
33             Collect(0);
34             // ここでh( Hoge )は、 0 -> 1へ世代昇格
35             Console.WriteLine("Hoge Gen is " + GC.GetGeneration(h));
36 
37             // ここでは、Generation( 0 )を解放しているので、h( Hoge )は、対象にならない
38             Collect(0);
39             Console.WriteLine("Hoge is Alive");
40         }
41     }
42 }