1

Dispose メソッドと、これで起こっていることがこのオブジェクトのガベージ コレクションをどのように失速させるかについて、さらに学習しようとしています。

だから、もし私が持っているなら:

DateTime _date = DateTime.UtcNow;

public void Dispose()
{
   bool append = true;
   using(var log = new System.IO.StreamWriter("log.txt", append))
   {
       log.WriteLine("Logged on: " + _date);
   }
}

Dispose メソッドで _date を呼び出しているという事実は、変数のルートを変更し、GC がこれを収集できないようにしますか?

これは私の質問hereから進んでいます。

4

2 に答える 2

5

ガベージ コレクターはとはまったく関係がないためDispose()、簡単な答えは、まったく関係ありません。GC にはファイナライザー ( ~YourType()) が含まれますが、一般的なパターンを意味しない限り、は含まれません。 Dispose()Dispose(bool disposing) {...}

次に、 aDateTimeは astructであるため、ガベージ コレクションは行われません。

于 2012-06-28T18:58:30.727 に答える
2

絶対違う。Disposeは、基本的にガベージコレクションとは何の関係もありません(多くの実装が呼び出すという事実を除けばGC.SuppressFinalize(this))。

廃棄パターンにより、オブジェクトのコンシューマーは礼儀正しく、管理されていないリソースをできるだけ早く解放できます。ガベージコレクションは、必要に応じて管理対象リソースを解放するための標準的な方法です。

一部の使い捨てクラスは、オブジェクトが廃棄されずに収集された場合に、管理されていないリソースの緊急解放が発生する可能性があるように、ファイナライザーも実装します。

于 2012-06-28T18:59:35.163 に答える