2016-11-19 18 views
2

C#プログラムが終了すると、クラスのstaticプロパティも1つの形式で破棄する必要があります。C#のガベージの静的依存関係

B

今Bの静的メンバとしてAの静的メンバとインスタンスとクラスBのようなインスタンスで、クラスAを想像してプログラムを終了するとき、Aの静的メンバとBを収集して破壊する必要があります。 A.aはデストラクタでB.bの情報を使用し、B.bはデストラクタでA.aの情報を使用するとします。

私たちはAとAを破壊/清掃する前に、BとB.bを破壊/清掃する必要があります。私は以下のコードでこれを試しました。

class A 
{ 
    private static A a = new A(); 
    public bool  done = false; 
    private A(){} 
    ~A() 
    { 
     GC.Collect(GC.MaxGeneration, GCCollectionMode.Forced, true); 
     GC.WaitForPendingFinalizers(); 
     System.IO.File.WriteAllText(@"a.txt", "A got destroyed, b:" + (B.getB().done ? "destroyed" : "intact")); 
     done = true; 
    } 

    public static A getA() { return a; } 
} 

class B 
{ 
    private static B b = new B(); 
    public bool  done = false; 
    private B(){} 
    ~B() 
    { 
     GC.Collect(GC.MaxGeneration, GCCollectionMode.Forced, true); 
     GC.WaitForPendingFinalizers(); 
     System.IO.File.WriteAllText(@"b.txt", "B got destroyed, a:" + (A.getA().done ? "destroyed" : "intact")); 
     done = true; 
    } 

    public static B getB() { return b; } 
} 

public class Program 
{ 
    public static void ensureInstances() {A.getA(); B.getB();} 

    public static void Main(string[] args) 
    { 
     ensureInstances(); 
     Console.WriteLine("Time to die"); 
    } 
} 

は今、私はこれを実行したとAAが破壊される前に、私の場合にはBbのが破壊されます、ということを見たが、BbdoneもまだAaとからアクセス可能でありました(STDOUT取得者が閉じ以来Console.WriteLineをは動作しません)それがデストラクタの後に呼ばれます。

私の質問では、クラス/オブジェクトはどのように破壊された後でも使用できますか? C#では、オブジェクトへの参照がなくてもメモリを再利用しなかったので、メモリをいつ再利用/解放できるかをどのように知っていますか?

答えて

1

C#プログラムが終了すると、クラスの静的プロパティも を1つの形式で破棄する必要があります。管理されたものであれば

は「世代」基づいていCLR :)


.NETガベージコレクションにそれらを残し、そのオブジェクトは、ジェネレーション0コレクションにより収集ごみかもしれませんが、されていませんメモリから完全に「破壊」または「除去」される。

親切にこちらをご参照ください:https://www.simple-talk.com/dotnet/.net-framework/understanding-garbage-collection-in-.net/


あなたがC++の背景、「C++のデストラクタは、」多くの場合、使用してブロックで使用IDisposableをとのDispose()メソッドと同等であることを心に留めておいてからであれば。 msdn.microsoft.com/en-us/library/system.idisposable.aspxを参照してください。デストラクタと呼ぶものはFinalizerと呼ばれ、C++デストラクタとは異なります。

関連する問題