私はこのthreadを見ましたが、私の考えには答えられませんでした。私の理解のためのCriticalFinalizerObjectは誤解を使用していますか?
:
常にが発生するネイティブreourcesの再利用! GC
は私がする必要がない理由
ので
Using
CriticalFinalizerObject
から継承しますか?私はreourcesが再生されないのでしょうどのような状況が表示されない....
私は何をしないのですか?
私はこのthreadを見ましたが、私の考えには答えられませんでした。私の理解のためのCriticalFinalizerObjectは誤解を使用していますか?
:
常にが発生するネイティブreourcesの再利用! GC
は私がする必要がない理由
ので
Using
CriticalFinalizerObject
から継承しますか? 私はreourcesが再生されないのでしょうどのような状況が表示されない....
私は何をしないのですか?
CriticalFinalizerObject
クラスは、Dispose/Finalizeプロセスに信頼性を追加します。防止のようなものThread.Abort()
等
なぜ私はCriticalFinalizerObjectから継承する必要がありますか?
Safehandle : CriticalFinalizerObject
を使用する主な理由は、管理されていないリソースパターンを処理しないようにするためです。 SafeHandleは、アンマネージリソースをマネージリソースに変換します。Joe Duffyを参照してください。
私はアプリケーションプログラマとして、あなたがCriticalFinalizerObjectからクラスを派生させなければならないとは思わないが、 'ハンドル'を扱う必要があるときは、SafeHandle
を使うべきだ。
私のポイントは、ネイティブリソースは、常に彼らはありません
を再利用されるということです。クリティカルファイナライザは、カスタムホスティングシナリオで重要です。管理されていないミッションクリティカルなプログラムがCLRをホストしているが、マネージコードがクラッシュしたときにオペレーティングシステムが破棄されるように単純に終了できない種類。
最も良い例はSQL Serverです。
すべてのことが支配しています。場合によっては、ネイティブリソースの再生以上のものが必要な場合もあります。ほとんどの場合、BCLのネイティブリソースコンシューマのすべてがCriticalFinalizerObjectを実装していません。たとえば、基本のファイルハンドルを閉じる前に、キャッシュされたデータをフラッシュするために、FileStreamはCriticalFinalizerObjectを実装します。
プログラムがクラッシュしたときにDispose()が実行されるとは思われません。 –
@HenkHoltermanあなたが正しく編集されました。 (私の指摘は、ネイティブリソースは常に再利用されることです) –