重複の可能性:
オブジェクト初期化子の使用における復活の違い
C#でガベージコレクターがどのように機能するかを理解するのに苦労しています(私は2012を使用しているので、C#4.5です)。これが私のサンプルコードです:
public class A
{
public int c;
public A(){}
public A(int pC)
{
c = pC;
}
}
public static void Main()
{
// Test 1
var a = new A {c=199};
var aRef = new WeakReference(a);
a = null;
Console.WriteLine(aRef.IsAlive);
GC.Collect();
Console.WriteLine(aRef.IsAlive);
// Console.WriteLine(GC.GetGeneration(aRef.Target)); //output 1
// Test 2
a = new A (200);
aRef = new WeakReference(a);
a = null;
Console.WriteLine(aRef.IsAlive);
GC.Collect();
Console.WriteLine(aRef.IsAlive);
}
出力はTrue/True / True/Falseです
どちらのテストでも、GC.Collectを呼び出す前に、ヒープ上のオブジェクトにルートがないように見えます。しかし、テスト1では、オブジェクトは強制gc実行を通過しますが、テスト2では通過しません。それで、イニシャライザーの使用について何か不思議なことが起こっていますか?私の推測では、初期化子を使用すると、同じオブジェクトの強力なルートになる「余分なコード」が存在する可能性があります。
ありがとう。