次のコードが与えられます:
namespace GcDemo
{
class Program
{
static void Main(string[] args)
{
var list = new List<object>();
Console.WriteLine("list is in {0} generation.", GC.GetGeneration(list));
GC.Collect();
Console.WriteLine("list is in {0} generation.", GC.GetGeneration(list));
GC.Collect();
list.Add(new object());
Console.WriteLine("list is in {0} generation. object is in {1} generation.", GC.GetGeneration(list), GC.GetGeneration(list[0]));
GC.Collect(0);
Console.WriteLine("list is in {0} generation. object is in {1} generation.", GC.GetGeneration(list), GC.GetGeneration(list[0]));
}
}
}
リストオブジェクトは第2世代にありますが、第0世代にある唯一の参照list [0]オブジェクトです。GC.Collect(0)に収集しないことがどうしてわかるのでしょうか。