問題タブ [idisposable]
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# - usingステートメントにIDisposableを実装する一般的なオブジェクトのリストはありますか?
オブジェクトがusingステートメントとうまく合うようなチートシートがあるのではないかと思っていました... SQLConnection
、MemoryStream
など。
connection.Close()
さらに一歩進んで、ステートメントブラケットを使用して、閉じる前に実際にどのように呼び出す必要があるかなど、他の「パズルのピース」を表示することもできます。
そのようなものは存在しますか?そうでなければ、多分私達はそれを作るべきです。
vb.net - それぞれへの参照を必要とせずに、これらの管理されていないリソースを破棄できますか?
4 つの異なるメインフレームへの接続を管理するクラス bMainframe があります。基盤となる同じアンマネージ ライブラリを特定の方法で開いたり、一度に複数のメインフレームに接続したりできます。各ライブラリには、管理されていないメインフレーム接続リソース用の独自の破棄コードがあります。ラッパーには、個々のメインフレーム接続の破棄コードを呼び出すコードもあります。
これは、誰かのプロジェクトが 4 つのメインフレームすべてを使用せず、ラッパーでディスポーザルを呼び出す場合にエラーを引き起こします。(FileLoadException は、4 つの管理されたメインフレームのアセンブリ X をロードできませんでした) その廃棄コードは、4 つのどれが何もない/null でないかをチェックするためです。何も/nullの場合でも、これにより.netがアセンブリをロードしようとしてクラッシュします。
外側のラッパーの破棄コードは役に立ちますか、それとも必要ですか? タイプ/アセンブリをロードするために.netをトリガーしないタイプのアセンブリがロードされているかどうかを確認する方法はありますか?
以下のコードを変更して fileloadexception をブロックしましたが、これが最善の方法だとは思いません。
c# - どちらが良いですか、そしていつ:ステートメントを使用するか、C#のIDisposableでDispose()を呼び出すのですか?
私が次のものを持っているとしましょう:
なぜ次のことをして、中括弧をいくつか失ってはいけないのですか?:
アドバイスありがとうございます!
c# - IDisposableクラスの逆シリアル化中に例外でDispose()が呼び出されるようにする方法はありますか?
C#では、次のステートメントを使用してIDisposableを実装するタイプのオブジェクトを逆シリアル化します(説明のみ)。
afaik、シリアライザーはデフォルトのctorを使用してオブジェクトを構築し、その後すべてのパブリックプロパティとフィールドを割り当てようとします。例外が発生した場合、構築されたオブジェクトを手に入れることはできません。
したがって、私の質問は、まだ割り当てられているリソースが自動的に解放されることを確認する方法があるかどうかです。Dispose(bool disposed)-明示的なファイナライザーを実装する「パターン」を認識していますが、明示的に(つまり決定論的に)リソースを解放する方が快適です。
.net-2.0 - XmlReader と IDisposable
私の目がだまされているのかもしれませんが、.NET 2.0 では、XmlReader が Dispose を実装しているのに Dispose() メソッドを持っていないのはなぜでしょうか? Dispose(bool) がありますが、パラメーターなしのオーバーロードではありません。
c# - using ブロックで C# BinaryWriter または BinaryReader を閉じる必要がありますか?
このコードを持つ:
BinaryWriter を閉じる必要がありますか? そうでない場合、なぜですか?
c# - IDisposable パターンでは、基底クラスは派生クラスが破棄されたフラグを共有できるようにする必要がありますか?
私は現在、適切な Dispose 使用パターンを持たない ac# コードベースの修正に取り組んでいます。
これは大規模なコードベースであり、リソースを必要とするコードベースであり、低レベルで多くのカスタム アンマネージ C++ ライブラリを使用しています。
Dispose パターンについてはよく理解しています。私は、この問題に関するゴールド スタンダードの記事であると私が信じているものを理解するのに少し時間を費やしました: Joe Duffy の dispose 記事
コードの重複を最小限に抑えるために、いくつかの破棄ヘルパー クラスを検討してきたので、私の質問は次のとおりです。
基本クラスが標準の Dispose パターンを実装する場合、破棄されたフラグを共有できるようにする必要があります。保護されているとマークされていますか?
明確にするために、オブジェクトインスタンスが破棄されたかどうかを定義する継承階層内に単一のブール状態のみが存在する必要がありますか、それとも継承ラダーの各ステップにプライベートブール値が存在する必要がありますか?
MSDN および上記のリンクの例では、各レベルでフラグを設定していますが、その背後にある理由については説明していません。私はこの問題について2つの考えを持っています.あなたの考えと理由は何ですか?
visual-studio-2008 - IDisposable オブジェクトを破棄するのを忘れた場合、Visual Studio から警告を受けることはできますか?
IDisposable を実装するオブジェクトを破棄するのを忘れたときに警告を表示するように Visual Studio 2008 を構成できますか?
c# - usingステートメントが例外をスローした場合、IDisposableオブジェクトを破棄するにはどうすればよいですか?
次のコードスニペットで、例外がスローIDataReader
された場合に破棄されることを確認するにはどうすればよいですか?ExecuteReader
using
シンタティックシュガーがDisposeを呼び出さないことは私には理にかなっています(それを呼び出すインスタンスがないため)。ただし、IDisposableを実装するクラスによって通常割り当てられる不足しているリソースがリリースされることをどのように確認できますか?
c# - IDisposable を正しく実装していますか?
このクラスは を使用するStreamWriter
ため、 を実装しIDisposable
ます。
}
現在の実装に問題はありますか? FileStream
つまり、基になるものを手動でリリースする必要がありますか? 正しくDispose(bool)
書かれていますか?