問題タブ [dispose]
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# - ソケットの破棄/2回のファイナライズの問題?
私は、ソケットを開き、リクエストを作成し、応答をリッスンするクラスのいくつかのコード(急いで追加するのではなく、まったく信頼していません)で作業しています。これは、可能な方法で例外をスローしていますxunitでテストしたときに理解できません。同じ例外が「ライブ」で発生すると想定していますが、クラスはシングルトンによって参照されているため、おそらく非表示になっています。
この問題は、xunit で「System.CannotUnloadAppDomainException: アプリケーション ドメインのアンロード中にエラーが発生しました」として明らかになり、内部例外は、ソケットを閉じるときにファイナライザー内で (本質的に) スローされる「System.ObjectDisposedException」です! close を呼び出して破棄するソケットへの他の参照は Socket クラスで保護されていないため、オブジェクトを他にどのように破棄できるかはわかりません。
さらに、単に ObjectDisposedException をキャッチして吸収すると、リスナー スレッドを閉じる行にヒットしたときに xunit が終了します。
ソケットを閉じるように求められる前に、ソケットを破棄する方法がわかりません。
ソケットに関する私の知識は、この問題を見つけてから学んだことだけなので、SO が必要とするすべてのものを提供したかどうかはわかりません。そうでなければLMK!
c# - ASP.NETでWebサービス参照を破棄する必要がありますか?
ガベージコレクターはWebサービス参照をクリーンアップしますか、それとも呼び出したメソッドの呼び出しが終了した後にサービス参照でdisposeを呼び出す必要がありますか?
c# - Dispose(bool) メソッドの実装では、メンバーを null に設定すべきではありませんか?
パターンを議論するガイド/ノート/記事のいずれも、メソッドでIDisposable
内部メンバーを設定する必要があることを示唆していません(特に、それらがメモリを大量に消費する獣である場合)。null
Dispose(bool)
内部のベンチマーク ツールをデバッグしているときに、その重要性に気づきました。以前は、内部に大きな配列を含むこのバッファがありました。以前は、ベンチマーク プログラム全体に静的バッファを使用していました。バッファーの処理が完了すると、この内部配列を解放する方法はなく、このバッファーを解放可能にすることもできません (静的であるため)。
したがって、Dispose()
が呼び出された後、破棄されるオブジェクト自体がGCによって回収されず、設定されていなくても、使用しているすべてのリソースを解放して再び利用できるようにするために、クラスはできる限りのことを行う必要があると思いますメンバーを null にすることで、GC による内部オブジェクトの収集を許可しないということは、Dispose の実装が完全ではないことを意味します。
これについてどう思いますか。
c# - 静的ブラシの廃棄
バイオリズムアプリを書いています。それをテストするために、私はボタンとPictureBoxを備えたフォームを持っています。ボタンをクリックすると、
これは初めて正常に実行されますが、2回目のクリックで次の例外が発生します。
エラーの原因となるカットダウン関数は次のとおりです。
コメントアウトした場合、ブラシの廃棄は問題なく機能しますが、それに満足していないため、別の解決策を見つけたいと考えています。手伝ってくれませんか?
c# - アプリケーションで System.Timers.Timer を使用する場合、System.Timers.Timer を破棄する必要がありますか?
アプリケーションのクラスの 1 つで System.Timers.Timer クラスを使用しています。Timer クラスには、IDisposable インターフェイスを実装する親 Component クラスから継承された Dispose メソッドがあることを知っています。以下のクラスのインスタンスは、アプリケーションのライフサイクル中に何度も作成されます。それらのそれぞれには、クラスのライフサイクル中に継続的に Elapsed イベントを生成する Timer クラスのインスタンスがあります。Timer クラスを使用してタイマー オブジェクトを破棄するクラスに IDisposable インターフェイスを実装する必要がありますか? (これをまったく行わないコードを見たことがあります)。次のように以下のクラスを使用すると、一部のアンマネージ リソースが解放されないのではないかと心配しています。
クラス:
c# - WPF ユーザー コントロールの破棄
サード パーティが使用することを目的としたカスタム WPF ユーザー コントロールを作成しました。私のコントロールには使い捨て可能なプライベート メンバーがあり、含まれているウィンドウ/アプリケーションが閉じられると、その dispose メソッドが常に呼び出されるようにしたいと考えています。ただし、UserControl は使い捨てではありません。
IDisposable インターフェイスを実装して Unloaded イベントをサブスクライブしようとしましたが、ホスト アプリケーションが閉じたときにどちらも呼び出されませんでした。MSDN によると、Unloaded イベントはまったく発生しない可能性があります。また、ユーザーがテーマを変更したときなど、複数回トリガーされることもあります。
可能であれば、特定の Dispose メソッドを呼び出すことを覚えているコントロールのコンシューマーに依存したくありません。
これまでに見つけた唯一の解決策は、Dispatcher の ShutdownStarted イベントをサブスクライブすることです。これは合理的なアプローチですか?
c# - IDisposable とは何ですか?
.NET にガベージ コレクションがある場合、なぜ明示的に呼び出す必要があるのIDisposable
でしょうか。
c# - NotifyIcon が消えることを保証する方法は?
子 (モーダル) フォームの 1 つで NotifyIcon コントロールを使用していますが、正常に動作しています。期待どおりにバルーン ヒントを表示したり、マウス イベントを処理したりします。ただし、予想どおりに消えません。具体的には、子フォームを終了し、親がコントロールに戻ってもアイコンは残ります。ツールチップにアクセスできるので、いわば「生きている」のです。
その後、アプリケーション全体を終了しても、カーソルをその上に置くまで画像は残ります。マウスを合わせると消えます。
正常に動作させるにはどうすればよいですか?通常は悪い言葉です:-0 それを作成したフォームが消えると、どうすればそれを消すことができますか?
誰かがこれを引き起こしていることを説明できますか?
G
編集:クローズドエバーントのフォームで Dispose メソッドを呼び出すと、これは機能しますが、本当にこれを行う必要がありますか? G
c# - オブジェクトをいつ破棄する必要があるかを知るにはどうすればよいですか?
何かを処分する必要があるときはどうすればわかりますか?誰かが私が私のコードに私が処分する必要があるいくつかのオブジェクトを持っていたと言っています。何かを処分する必要があるとは思いもしませんでした(これはC#での最初の週です)。オブジェクトをいつ破棄する必要があるかを知るにはどうすればよいですか?私はhttp://msdn.microsoft.com/en-us/library/system.security.cryptography.hashalgorithm.aspxを使用していましたが、ページに破棄についての言及がないか、他のobjで言及されているのを見ました。 (SOの誰かによって)処分するように私に言いました。
IDisposableを継承する場合は必要ですが、継承する場合はどうすればわかりますか?
c# - デストラクタで dispose(false) を呼び出すのはなぜですか?
次に示すのは、典型的な破棄パターンの例です。
dispose の機能は理解していますが、デストラクタで dispose(false) を呼び出す理由がわかりません。定義を見ると、まったく何もしないのに、なぜこのようなコードを書くのでしょうか? デストラクタから dispose をまったく呼び出さないのは理にかなっているでしょうか?