問題タブ [finalizer]
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# - CodeDom を使用したファイナライザー?
(CodeSnippetTypeMember を使用する以外に) CodeDom で生成されたクラスに Finalizer を追加することは可能ですか?
MSDN でそれに関する情報を見つけることができませんでした。
java - 単純なオブジェクトを作成および破棄する時間を測定する
効果的なJava2ndEditionアイテム7から:ファイナライザーを避ける
「ああ、もう1つ、ファイナライザーを使用するとパフォーマンスが大幅に低下します。私のマシンでは、単純なオブジェクトの作成と破棄にかかる時間は約5.6nsです。ファイナライザーを追加すると2,400nsになります。つまり、ファイナライザーを使用してオブジェクトを作成および破棄するのは、約430倍遅くなります。」
オブジェクトを作成および破棄する時間をどのように測定できますか?あなたはただしますか:
c# - デストラクタがないのに、なぜSuppressFinalizeを呼び出す必要があるのですか?
適切な答えが得られない質問はほとんどありません。
1)デストラクタがないのに、Dispose関数でSuppressFinalizeを呼び出す必要があるのはなぜですか。
2)Disposeとfinalizeは、オブジェクトがガベージコレクションされる前にリソースを解放するために使用されます。管理対象リソースか非管理対象リソースかに関係なく、解放する必要があります。次に、IDisposable:Disposeからこのオーバーライドされた関数を呼び出すときにpass'true'と言って、dispose関数内に条件が必要な理由を示し、finalizeから呼び出されるとfalseを渡します。
ネットからコピーした以下のコードを参照してください。
ブール値で保護されたDispose関数を削除し、以下のように実装するとどうなりますか。
c# - ctor と finalizer の両方が例外をスローする C# クラスですべての例外を処理するにはどうすればよいですか?
特定の状況下で、次のようなクラスのすべての例外を処理するにはどうすればよいですか?
私はこれを試しましたが、うまくいきません:
「using」も使用しようとしましたが、~Test(); からスローされた例外を処理しません。
どうすれば回避できますか?
c# - 「Finalizeメソッドが他のオブジェクトを参照してはならない」のはなぜですか?
ファイナライズ内で管理対象リソースを解放しないことが推奨される理由について考えてきました。http://msdn.microsoft.com/en-us/library/system.gc.suppressfinalize.aspxでコード例を参照し、文字列「Dispose(bool disposed)executes in twodifferentscenarios」を検索して読んでください。コメント、あなたは私が何を意味するかを理解するでしょう。
私が考えることができる唯一の可能性は、ファイナライザーがいつ呼び出されるかを予測することができないという事実とおそらく関係があるということです。誰かが正しい答えを知っていますか?
ありがとう、mishal
c# - c#ファイナライザーが例外をスローしますか?
MSDN からの引用:
Finalize または Finalize のオーバーライドが例外をスローした場合、ランタイムは例外を無視し、その Finalize メソッドを終了して、ファイナライズ プロセスを続行します。
それでも私が持っている場合:
その後、実行時例外が発生しますか?
psこれが決して起こらないことはわかっていますが、この動作に興味があります。私たちのクライアントの1つは、すべてのファイナライザーの周りに空のtry catchがありました..問題が発生したとき、またはオブジェクトを再選択したときにログに記録しませんでした:/
.net - ファイナライザーは他のマネージ クラスのメソッドを呼び出すことができますか?
Overriding the Finalize methodとObject.Finalize documentationで説明されているように、私は答えが「いいえ」であると確信していました。
ただし、FileStream
Reflector をランダムにブラウジングしているときに、ファイナライザーからそのようなメソッドを実際に呼び出すことができることがわかりました。
書かれている正確な方法のためにこれが常に機能するかどうか疑問に思い始めました。したがって、「ファイナライザーからマネージドクラスに触れないでください」は、正当な理由とそれを行うために必要な知識があれば、破ることができるガイドラインにすぎないかどうか右。
もう少し深く掘り下げたところ、「ルール」が破られたときに起こりうる最悪の事態は、アクセスされている管理対象オブジェクトがすでにファイナライズされているか、別のスレッドで並行してファイナライズされている可能性があることがわかりました。したがって、SafeFileHandle のファイナライザーが、その後の Dispose の呼び出しが失敗する原因となるようなことを何もしなかった場合、上記は問題ないはずです...そうですか?
質問: 結局のところ、別のマネージ クラスのメソッドがファイナライザーから確実に呼び出される可能性があるという状況はありますか? 私はいつもこれが間違っていると信じていましたが、このコードはそれが可能であり、そうする十分な理由があることを示唆しています.
おまけ:SafeFileHandle
はファイナライザーから呼び出されていることさえ認識しないことに注意してDispose()
ください。基本クラス にはSafeHandle
、実際には と の 2 つのプライベート メソッドがInternalDispose
ありInternalFinalize
、この場合InternalDispose
は が呼び出されます。これは問題ではありませんか?なぜだめですか?...
java - ファイナライザに「重大なパフォーマンス ペナルティ」があるのはなぜですか?
効果的な Java は次のように述べています。
ファイナライザーを使用すると、パフォーマンスが大幅に低下します。
ファイナライザーを使用してオブジェクトを破棄するのが遅いのはなぜですか?