問題タブ [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.
nhibernate - NHibernate AdoTransaction のファイナライザが呼び出されるのはなぜですか?
単体テストと統合テストのプロファイリングを行っていますが、NHibernate.Transaction.AdoTransaction のファイナライザーに多くの時間が費やされていることがわかりました。これは、適切に破棄されていないことを意味します。
コードで直接 AdoTransaction を使用していないため、NHibernate 内の他のオブジェクトで使用されている可能性があります。私が何を処分するのを忘れているのか分かりますか?
これが私のテキストフィクスチャです:
sharepoint - Sharepoint SPDisposeCheck
SPDisposeCheck ユーティリティは、不適切に破棄されたSPWeb.Add呼び出しを警告しました。以下に示すように、通常のusing(SPWeb NewWeb = webs.add(siteUrl ....)メソッドは機能しません。これは、RunWithElevatedPrivilegesによって newWebがコンテキスト外に返されるためです。
以下のnewWeb = webs.Add()行を見て、新しい SPWeb オブジェクトを適切に破棄する方法を提案できる人はいますか? 前もって感謝します。
c# - Dispose メソッドでデータベース接続を閉じるのは正しいですか?
私たちのアプリケーションの 1 つで使用されているデータベース接続が常に閉じられているとは限らないのではないかと疑っています。コードを見に行ったところ、オブジェクトDataProvider
を持つクラスが見つかりました。SqlConnection
接続はこのクラスのコンストラクターで開かれ、そのDispose
メソッドで閉じられます (判断しないでください。開いた接続を維持することは悪であることはわかっています。それは私のコードではなく、とにかく問題のポイントではありません)。Dispose
メソッドは次のように実装されます。
問題は
、接続が閉じていることを常に保証するかどうかです。
このコードは正しいですか?
呼び出す必要があると思います_conn.Dispose()
-私は正しいですか、それは接続を閉じないことに影響しますか(おそらくそうではありません)?
.net - Disposeからスローされた例外を処理するには?
最近、オブジェクトが破棄されないというトリッキーなバグを調査していました。
コードでいくつかのパターンを見つけました。一部の m_foo が破棄されていないことが報告されていますが、SomeClass のすべてのインスタンスが破棄されているようです。
Foo.Dispose が例外をスローする可能性があるため、次のコードが実行されないため、m_bar が破棄されない可能性があると思われます。
Foo/Bar はサード パーティのものである可能性があるため、例外がスローされないことは保証されません。
すべての Dispose 呼び出しを try-catch でラップするだけでは、コードがぎこちなくなります。
これを処理するためのベストプラクティスは何ですか?
c# - usingステートメントにIDisposableを実装する一般的なオブジェクトのリストはありますか?
オブジェクトがusingステートメントとうまく合うようなチートシートがあるのではないかと思っていました... SQLConnection
、MemoryStream
など。
connection.Close()
さらに一歩進んで、ステートメントブラケットを使用して、閉じる前に実際にどのように呼び出す必要があるかなど、他の「パズルのピース」を表示することもできます。
そのようなものは存在しますか?そうでなければ、多分私達はそれを作るべきです。
c# - WinFormのDisposeメソッドを拡張するにはどうすればよいですか?
FxCopから次の警告が表示されます。
「「RestartForm」には、IDisposableタイプのフィールド「RestartForm.done」が含まれています:「ManualResetEvent」。「RestartForm」のDisposeメソッドを変更して、このフィールドでDisposeまたはCloseを呼び出します。」
わかりました。これが何を意味するのか、なぜこれを実行する必要があるのかを理解しています...またはSystem.Windows.Forms.Form
をオーバーライドできない場合を除いて、どうすればよいですか?現在、私はこのソリューションを実行しています:.Close()
.Dispose()
これは私のアプリケーションの意図どおりに機能します...しかし、FxCopはまだこのメッセージを表示します。私はカバーされていますか、それを安全に無視できますか、それともこれを行うべき別の方法がありますか?
c# - usingステートメントが例外をスローした場合、IDisposableオブジェクトを破棄するにはどうすればよいですか?
次のコードスニペットで、例外がスローIDataReader
された場合に破棄されることを確認するにはどうすればよいですか?ExecuteReader
using
シンタティックシュガーがDisposeを呼び出さないことは私には理にかなっています(それを呼び出すインスタンスがないため)。ただし、IDisposableを実装するクラスによって通常割り当てられる不足しているリソースがリリースされることをどのように確認できますか?
.net - 動的に作成されたコントロールの破棄
実行時に TabPages を動的に追加する WinForms TabControl があります。各 TabPage には、WebBrowser コントロールが含まれています。実行時に TabPages を削除することもできます。
TabPage や WebBrowser コントロールを Dispose() する必要がありますか?
少しリソースを浪費するので、少なくとも WebBrowser コントロールを Dispose() する必要があるように思えます。
c# - 興味深いイベント「破棄」動作
.NET WinForms アプリで興味深い動作に気付きました。多くの MDI 子が追加された MDI フォームがあります。これらの子フォームは、本質的にそれ自体を更新するための呼び出しである「ブロードキャスト」イベントをリッスンします。イベントは基本クラスで宣言され、リッスン イベントは子フォームに追加されます。
Dispose() メソッドでイベントが明示的に削除されていない場合、これらの子フォームが閉じられていても、イベントがまだヒットしていることに気付きました。
この背後にある理由は何ですか?フォームが閉じている場合は、イベントを切り離す/破棄する必要がありますか? 実際のイベント自体が外部クラスで宣言されているためですか?これは私が推測しているものです。
洞察をいただければ幸いです。
(C#、.NET 3.5 を使用)