[解決済み] C#でIDisposableとdestructorの違いは何ですか?
質問
クラスに対して、デストラクタではなく IDispose を実装するのはどのような場合ですか? 私は この記事 を読みましたが、私はまだポイントを逃しています。
私の仮定では、オブジェクトに IDispose を実装すると、ガベージコレクタがそれを行うのを待つのではなく、明示的にそれを「破壊」することができます。 これは正しいでしょうか。
つまり、私は常にオブジェクト上で明示的にディスポースを呼び出すべきだということでしょうか? これの一般的な例にはどのようなものがありますか?
どのように解決するのですか?
ファイナライザ(別名デストラクタ)はガベージコレクション(GC)の一部です。GCは主にメモリの圧迫(つまり、より多くのスペースが必要)の結果として起こるので、いつ(あるいはいつ)起こるかは不定です。ファイナライザは、通常は アンマネージド 管理されたリソースは独自の収集/廃棄を行うからです。
したがって
IDisposable
は
決定論的に
オブジェクトをクリーンアップするために使用されます。これはオブジェクトのメモリを回収しませんが (それはまだ GC に属します)、たとえばファイルやデータベース接続などを閉じるために使用されます。
これに関する以前のトピックはたくさんあります。
最後に、このように
IDisposable
オブジェクトはファイナライザも持っていることが珍しくないことに注意してください。この場合は
Dispose()
は通常
GC.SuppressFinalize(this)
つまり、GC はファイナライザを実行せず、単にメモリを捨てるだけです(ずっと安上がりです)。ファイナライザは、もし
Dispose()
を忘れてもファイナライザは実行されます。
関連
-
[解決済み】バックスラッシュを含むパス文字列のエスケープシーケンスが認識されない件
-
[解決済み] C#のStringとstringの違いは何ですか?
-
[解決済み] C#の正しいバージョン番号を教えてください。
-
[解決済み] .NETでのdecimal, float, doubleの違い?
-
[解決済み] usingディレクティブはネームスペースの内側と外側のどちらを使うべきですか?
-
[解決済み] IDisposable インターフェースの正しい使用法
-
[解決済み] C#のconstとreadonlyの違いは何ですか?
-
[解決済み] フィールドとプロパティの違いは何ですか?
-
[解決済み] SelectとSelectManyの違い
-
[解決済み] C#のFinalize/Disposeメソッドの使用について
最新
-
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 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】コンパイルエラー「未割り当てのローカル変数を使用しています」が発生したのはなぜですか?
-
[解決済み】C#で四捨五入する方法
-
[解決済み】C# ASP.NET使用時に「WebClientのリクエスト中に例外が発生しました。
-
[解決済み】バックスラッシュを含むパス文字列のエスケープシーケンスが認識されない件
-
[解決済み】C# - パスに不正な文字がある場合
-
[解決済み】画像のペイントにTextureBrushを使用する方法
-
[解決済み】WebResource.axdとは何ですか?
-
[解決済み】オブジェクトを破棄してnullにする必要があるのか?
-
[解決済み】優れた.NET開発者なら答えられるはずの質問?[クローズド]
-
[解決済み】FinalizeとDisposeの比較