問題タブ [suppressfinalize]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c# - GC.SuppressFinalize()はいつ使用する必要がありますか?
.NETでは、どのような状況で使用する必要がありますGC.SuppressFinalize()
か?
この方法を使用するとどのような利点がありますか?
c# - TimedLockで、なぜSuppressFinalize(tl.leakDetector)が必要なのですか?
http://www.interact-sw.co.uk/iangblog/2004/04/26/yetmoretimedlocking
なぜこの行が必要なのですか?
System.GC.SuppressFinalize(tl.leakDetector);
残りのモニターにアラートを出すコードを実行するために、ファイナライザーを抑制すべきではないと思いました。
明らかに、私はデバッグバージョンのみを見ています。
ありがとう
c# - デストラクタがないのに、なぜSuppressFinalizeを呼び出す必要があるのですか?
適切な答えが得られない質問はほとんどありません。
1)デストラクタがないのに、Dispose関数でSuppressFinalizeを呼び出す必要があるのはなぜですか。
2)Disposeとfinalizeは、オブジェクトがガベージコレクションされる前にリソースを解放するために使用されます。管理対象リソースか非管理対象リソースかに関係なく、解放する必要があります。次に、IDisposable:Disposeからこのオーバーライドされた関数を呼び出すときにpass'true'と言って、dispose関数内に条件が必要な理由を示し、finalizeから呼び出されるとfalseを渡します。
ネットからコピーした以下のコードを参照してください。
ブール値で保護されたDispose関数を削除し、以下のように実装するとどうなりますか。
c# - Dispose()メソッドのGC.SuppressFinalize(this)の目的は何ですか?
私は次のコードを持っています:
そのGC関連の呼び出しの目的を説明するコメントがありますが、それがなぜそこにあるのかはまだわかりません。
using
ブロックで使用されている場合のように、すべてのインスタンスが存在しなくなると、オブジェクトはガベージコレクションに向けられませんか?
これが重要な役割を果たすユースケースシナリオは何ですか?
.net - IDisposableにGC.SupressFinalizeを実装してファイナライズする必要がありますか?
私の新しいクライアントの場所のコードレビューチェックリストには次のものがあります-
DisposeとFinalizeを実装するクラスは、Dispose実装でGC.SupressFinalizeを呼び出す必要があります
なんで?
IDisposableインターフェースを実装するクラスは、Dispose実装でGC.SupressFinalizeを呼び出す必要があるため、読み取らないでください。
または私は愚かな何かを逃していますか?
c# - C# 言語: ガベージ コレクション、SuppressFinalize
「The C# Language」、第 4 版を読んでいます。ガベージ コレクションについて次のように説明しています。
「BILL WAGNER: 次のルールは、C# と他のマネージド環境との重要な違いです。
そのようなクリーンアップが抑制されていない限り (たとえば、ライブラリ メソッド GC.SuppressFinalize の呼び出しによって)、アプリケーションの終了前に、まだガベージ コレクションされていないすべてのオブジェクトのデストラクタが呼び出されます。"
ここでいくつか質問があります。
Q1. .net が他のマネージド環境と異なるのはなぜですか (これは Java を示唆していると思いますか?)。特定の設計上の懸念はありますか?
Q2.
GC.SuppressFinalize
呼び出されたオブジェクトはどうなりますか? これは、GC がそのようなオブジェクトのファイナライザー (デストラクタ) を呼び出さないことを意味することを理解しています。そうしないと、メモリ リークが発生しますか?
c# - ReRegisterForFinalize SuppressFinalize の実際の例
「<a href="https://web.archive.org/web/20130418095110/http://msdn.microsoft.com/en-us/library/bb985010.aspx" rel=" nofollow">ガベージ コレクション: Microsoft .NET Framework での自動メモリ管理」、Jeffrey Richter によるものですが、 ReRegisterForFinalize
orを使用する実際のサンプルは思いつきませんでしSuppressFinalize
た。
誰かが私にいくつかの例を提供してもらえますか?
c# - dispose呼び出しが役に立たないように、コンストラクターでSuppressFinalizeを呼び出すクラスはどれですか?
コンストラクターですでにSuppressFinalizeを呼び出しているDataTableなどのクラスがいくつかあるため、dispose /useusingを呼び出す意味はありません。(disposeは以前にリリースするためのものですが、リリースするものがないため)
だから、私はそのようなクラスのリスト、またはリフレクションによってそのようなクラスのリストを見つける方法を知りたいですか?
c++-cli - C++ CLI で (delete によって) デストラクタを手動で呼び出した後に Finalizer を呼び出すべきではない理由
C++ CLI でのデストラクタとファイナライザの違いについて説明しているこの記事を参照した後、なぜコンパイラはいくつかの命令を追加するのか疑問に思います。デストラクタでファイナライズを抑制するには?
線量ファイナライズ関数は「In finally, it will be called by GC」の略ではありませんか?
と
デストラクタとファイナライザの両方に同じ「リリース リソース」コードを追加する必要がありますか?