2009-09-03 3 views
1

IDisposableを実装しているオブジェクトおよび/またはFinalizerが第2世代まで存在するオブジェクトをRichterのC#の本で読んだことはかなり確信していました。しかし、参照は見つかりません。私の信念を裏付けるようです。第2世代が収集されるまで、IDisposableを実装しているオブジェクトおよび/またはファイナライザが存在するオブジェクトを実行しますか?

誰でも確認/拒否できますか?

答えて

4

ファイナライザは、ファイナライザがラウンドするために待ち行列に置かれているため、Gen 1にも存続します。しかし、ファイナライザがGen 1コレクションの前にそれらに到達すると、Gen 2には生き残れません。

私は比較のためにその本を持っていませんが、大きなオブジェクトヒープのアイテムとこれを混同しないでください。ラージオブジェクトヒープは、Gen 2コレクションでのみ収集されます。

+0

ありがとうございます。これは私のテストで見たことをサポートしています。私はLOHとこれを混同していた可能性があります - 私は明らかにこのようなことを忘れ始めているので、十分にインタビューしていません:-) – endian

1

Anthonyによると、ファイナライズはガベージコレクションを遅延させます(つまり、ファイナライザが実行されるのを待っている間にオブジェクトが通常昇格されます)。

IDisposableを単独で実装してもガベージコレクションには影響しません.GCはIDisposableを「認識」しません。

0

何かが私は追加したい:適切に実装IDisposableをパターンが

GC.SuppressFinalize(this); 

そのように、ガベージコレクタは、オブジェクトが確定されるまで待つ必要はありません呼び出す必要があります。 hereを参照してください。

関連する問題