2012-03-29 2 views
3

Lazy <T>の目には?私は疑問を抱いた

Lazy<Foo> f = new Lazy<Foo>(); 

それは実際に

にアクセスしている時間がf行いませまで「レイジーインスタンスは、」オブジェクトの作成を延期:GC

すなわちLazyオブジェクトを見てどのようにここにオブジェクトのルートがありますか? (彼はGC'edされていないことを意味する)?

(オブジェクトはこの時点で作成されていません...いくつかの他のコードは、上で、後でそれに価値を置く)

または

GCがun-参照/未としてそれを見てオブジェクトを初期化し、GCeしました。

私は世話をする必要がありますか? (の/恐れ?)

public class Foo 
    { 
     public int ID { get; set; } 
     public Foo() 
     { 
      ID = 1; 
     } 
    } 
+4

私は 'Lazy 'はGCに関して何ら特別なものではないと思います。 – CodesInChaos

答えて

4

fは確かLazy<Foo>インスタンスへの参照です。カプセル化されたFooインスタンスは独立していますが、間接的に到達可能(保持)されています。

fが存在する限り、つまりルートまたは到達可能な場合、インスタンスは収集できません(できません)。

ここではGCに関して特別なことはありません。 LazyとWeakReferenceを混同しないでください。

+0

"レイジーインスタンシエーション"は、実際にアクセスされるまでオブジェクトの作成を延期します。 –

+0

@RoyiNamir - それはまったく問題ではありません。私は "Lazy インスタンス"ではなく、 "Fooインスタンス"ではないことを覚えておいてください。 –

+0

@RoyiNamir:はい、それが参照する "オブジェクト"は、 'Lazy 'インスタンスが 'Lazy 'インスタンスその自己。 –

関連する問題