[解決済み] デストラクタ、ディスポーザ、ファイナライズメソッドの違い
質問
c#でガベージコレクタがどのように動作するか勉強しています。の使い方で迷っています。
Destructor
,
Dispose
と
Finalize
メソッドを使用します。
私の調査と理解では、クラス内にデストラクタメソッドを持つことは、ガベージコレクタに、クラスのインスタンス上で明示的に呼び出すことができないデストラクタメソッドで述べられた方法でガベージコレクションを実行するよう指示します。
は
Dispose
メソッドは、ガベージコレクションを制御するためのユーザーを提供することを意図しています。 このメソッドは
Finalize
メソッドはクラスによって使用されるリソースを解放しますが、オブジェクトそのものは解放しません。
私は正しい方法で理解しているかどうかわかりません。疑問を明らかにしてください。さらなるリンクやガイドがあれば歓迎します。
どのように解決するのですか?
Destructorは暗黙のうちにFinalizeメソッドを呼び出しており、技術的には同じものです。DisposeはIDisposableインターフェイスを実装したオブジェクトで利用可能です。
あなたは、: デストラクタ C# - MSDN
<ブロッククオートデストラクタは、暗黙のうちにオブジェクトの基底クラスに対してFinalizeを呼び出します。 オブジェクトを呼び出します。
同じリンクからの例です。
class Car
{
~Car() // destructor
{
// cleanup statements...
}
}
Destructorのコードは暗黙のうちに以下のコードに変換されています。
protected override void Finalize()
{
try
{
// Cleanup statements...
}
finally
{
base.Finalize();
}
}
Destructorに対する理解は正しいです。
から MSDN
<ブロッククオートこの プログラマはデストラクタがいつ呼ばれるかを制御することができません。 これはガベージコレクタによって決定されるからです。 . ガベージコレクタは ガベージコレクタは、アプリケーションによって使われなくなったオブジェクトをチェックします。 アプリケーションによって使用されなくなったオブジェクトをチェックします。もし、オブジェクトが破棄される資格があると判断した場合、ガベージコレクタは デストラクタを呼び出し、そのオブジェクトを保存するために使用されたメモリを回収します。 を回収します。デストラクタは、プログラムが終了するときにも呼び出されます。また Collectを呼び出すことで強制的にガベージコレクションを行うことも可能ですが、ほとんどの場合、これは避けるべきです。 を呼び出すことで強制的にガベージコレクションを行うことができますが、ほとんどの場合、これは性能上の問題を引き起こす可能性があるため、避ける必要があります。 を呼び出すことで強制的にガベージコレクションを行うことができます。
関連
-
[解決済み] C#のStringとstringの違いは何ですか?
-
[解決済み] .NETでのdecimal, float, doubleの違い?
-
[解決済み] C#のconstとreadonlyの違いは何ですか?
-
[解決済み] フィールドとプロパティの違いは何ですか?
-
[解決済み] 2つの日付の差(日数)を計算する?
-
[解決済み] SelectとSelectManyの違い
-
[解決済み] C#の==とEquals()の違いについて
-
[解決済み] C#のFinalize/Disposeメソッドの使用について
-
[解決済み】FinalizeとDisposeの比較
-
[解決済み] C#でIDisposableとdestructorの違いは何ですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】コンパイルエラー「未割り当てのローカル変数を使用しています」が発生したのはなぜですか?
-
[解決済み】ここで「要求URIに一致するHTTPリソースが見つかりませんでした」となるのはなぜですか?
-
[解決済み] [Entity Framework 4.1でエンティティに関連オブジェクトを追加する際に、エンティティオブジェクトをIEntityChangeTracker.の複数のインスタンスから参照できない。
-
[解決済み] エンティティタイプ <type> は、現在のコンテキストのモデルの一部ではありません。
-
[解決済み】「入力文字列が正しい形式ではありませんでした」エラーの解決方法は?[重複しています]。
-
[解決済み】「namespace x already contains a definition for x」エラーの修正方法は?VS2010にコンバートした後に発生しました。
-
[解決済み】"指定されたパスのフォーマットはサポートされていません。"
-
[解決済み] 関数を終了するには?
-
[解決済み】ファイルやアセンブリ、またはその依存関係の1つをロードできませんでした。
-
[解決済み】プロセスが実行されているかどうかを知るには?