[解決済み] ガベージコレクタはIDisposable.Disposeを呼んでくれるのですか?
質問
.NETの IDisposable パターン を意味します。 は、ファイナライザを記述し、IDisposable を実装する場合、ファイナライザが明示的に Dispose を呼び出す必要があることを意味します。 これは論理的であり、ファイナライザーが正当化されるまれな状況で私が常に行ってきたことです。
しかし、これをそのまま実行するとどうなるでしょうか。
class Foo : IDisposable
{
public void Dispose(){ CloseSomeHandle(); }
}
で、ファイナライザーも何も実装していません。フレームワークは私のためにDisposeメソッドを呼び出してくれるでしょうか?
はい、私はこれが馬鹿に聞こえることを理解し、すべてのロジックはそうしないことを意味しますが、私はいつも頭の後ろに2つのことを持っていて、それが私を不確かなものにしています。
-
数年前、ある人が実際にそうなると言っていましたが、その人は自分のことをよく知っている非常に確かな実績のある人でした。
-
コンパイラー/フレームワークは、実装するインターフェイスに応じて他の「マジック」なことを行うので (例: foreach、拡張メソッド、属性に基づくシリアル化など)、これも「マジック」かもしれないと納得がいきます。
私はそれについて多くのものを読み、多くのことが暗示されてきましたが、私はこれまで 決定的な この質問に対するYesかNoかの答えを見つけることができませんでした。
どのように解決するのですか?
.Netのガベージコレクタは、ガベージコレクション時にオブジェクトのObject.Finalizeメソッドを呼び出します。 それにより デフォルト これは 何もしない であり、追加のリソースを解放したい場合はオーバーライドする必要があります。
Disposeは自動的に呼び出されることはありません。 明示的に リソースが解放される場合、例えば 'using' や 'try finally' ブロックの中で呼び出されなければなりません。
参照 http://msdn.microsoft.com/en-us/library/system.object.finalize.aspx をご覧ください。
関連
-
[解決済み】「The breakpoint will not currently be hit」を改善するには?このドキュメントにはシンボルが読み込まれていません。" という警告はどうすれば改善されますか?
-
[解決済み] Html.BeginForm()にCSSクラスを追加する。
-
[解決済み] DelphiとDelphi.NETの違いについて
-
[解決済み] C#のStringとstringの違いは何ですか?
-
[解決済み] C#の正しいバージョン番号を教えてください。
-
[解決済み] なぜList<T>を継承しないのですか?
-
[解決済み] WCF - メッセージサイズのクォータを増加させる方法
-
[解決済み] C#のFinalize/Disposeメソッドの使用について
-
[解決済み】HttpClientとHttpClientHandlerはリクエストの間にディスポされなければならないのでしょうか?
-
[解決済み】DataSetとDataTableは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 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] .net 4.5アップグレード後、System.Web.Httpが見つからない
-
[解決済み] Microsoft.NETFrameworkとMicrosoft.NETFramework64の違いは何ですか?
-
[解決済み] ネットワークの位置からアセンブリをロードすることはできません
-
[解決済み] LINQ to Entitiesはメソッドを認識しません。
-
[解決済み] Windowsイベントログで参照される「フレームワークのバージョン」とは何ですか?
-
[解決済み] DockPanelを空きスペースいっぱいに表示させる方法
-
[解決済み] .NET Framework 4 マルチターゲティングパックがアンインストールできない
-
[解決済み] 1は有効なWin32アプリケーションではありません "を解決するには?
-
[解決済み] .Any() vs .Count() > 0のどちらのメソッドがより良いパフォーマンスを発揮しますか?
-
[解決済み] .NETで文字列から発音区分符号(アクセント)を削除するにはどうすればよいですか?