問題タブ [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.

0 投票する
8 に答える
703 参照

c# - null で使用できますか?

リソースが IDisposable を実装していない場合、次のコードは機能しますか?

0 投票する
2 に答える
4288 参照

powershell - PowerShell で System.Xml.XmlWriter を破棄するにはどうすればよいですか

XmlWriter オブジェクトを破棄しようとしています:

エラー:

[System.Xml.XmlWellFormedWriter] に 'Dispose' という名前のメソッドが含まれていないため、メソッドの呼び出しに失敗しました。

反対側:

私は何をすべきか?

0 投票する
3 に答える
2120 参照

vb.net - VS2005/VB.NET が IDisposable インターフェイスを Dispose(boolean として処理) オーバーロードで実装するのはなぜですか?

最近、IDisposable とオブジェクトのファイナライズの推奨パターンを、VS2005/VB.NET が提供する自動生成パターンと比較する必要がありました。自動生成されたものをかなり使用しましたが、2つ並べて見た後、VB.NETの実装について多くの質問がありました...

参考までに、IDE の実装を次に示します。

質問:

  1. object.Dispose() が最初に明示的に呼び出されずに GC 中に Finalize() が呼び出された場合、disposing:=false となり、"if disposing..." 内のコードが実行されて管理対象リソースが解放されることはなく、その結果、それらがメモリに残ります。次の GC パスまで。これらが明示的に解放されないのはなぜですか? そうすることで、最初の GC パスでより多くのメモリを解放し、次のパスまで不要なオブジェクトをメモリに残しませんか?
  2. IDisposable クラスで Finalize() をオーバーライドするときに、IDE が Dispose(false) 呼び出しを生成しないのはなぜですか?
  3. Dispose(false) を呼び出して、それが IDE の実装であり、別の方法で bool パラメーターを使用するカスタム実装ではないことを GC がどのように知るのでしょうか? * ...GC がその存在をテストし、特定の実装 (object.Dispose(disposing:=false)) を想定する方法で使用する場合、Dispose(disposing as bool) をインターフェイス メンバーにするべきではありませんか? * 両方が存在する場合Dispose()Dispose(disposing as boolean)なぜ GC はオーバーロードされた非インターフェース メンバーを呼び出すことを選択するのでしょうか?

全体的に、明示的に呼び出されたときに実行される拡張コードパスを持つという想定される付加価値に混乱していますDispose()(明示的に呼び出されたかどうかに関係なく実行される共通パスを持つのではなくDispose())。善意で提供されていることは理解できますが、Dispose()直接呼び出されない場合に管理対象リソースの実際のリリースを遅らせる以外に、それがどのように機能するかはわかりません。本質的には、オブジェクト グラフで管理対象リソースを到達不能にすることだけが機能し、2 回目の GC が実行されるまでそれらを孤立させ、不要になったことがわかっている時点で解放するのではないようです。

0 投票する
4 に答える
2286 参照

c# - GC と IDispose は C# でどのように機能しますか?

ネットから直接ビットマップにストリーミングして画像を読み込んでいたことを覚えています。ストリームを閉じ、ビットマップを返し、イメージ コントロールに保持します。

= loadPicture() を実行した場合を除いて、C++ でスマート ポインターが行うように、最初のビットマップが解放されます。しかし、そうではなく、処分を呼び出すまで、大量の RAM を消費しました。だから私の質問はです。

GC および Dispose 可能なオブジェクトは C# でどのように機能しますか? smart_ptr のように実装されていないのはなぜですか?

0 投票する
2 に答える
303 参照

.net - IEnumerable をまとめる方法

IEnumerable<IDisposable>特定の時点で処分する必要があるコレクションがあります。問題は、場合によっては、すべてのオブジェクトが 1 つのタイプであり、オブジェクトからデータを収集して単一の RPC 呼び出しを行うことによって、オブジェクトを破棄する必要があることです。それ以外の場合、オブジェクトは別の型になり、それぞれに対して Dispose を呼び出すだけで済みます。

私はこれを行うコードを制御しますが、実装の詳細をコードにプッシュしたくありません。

必要に応じて、このようなものに切り替えることができますが、エレガントではないようです。

編集:リスト (今のところ) にはどちらか一方のみが含まれ、両方は含まれません。しかし、私は、Dispose コードが RPC のことをまったく知らなくてもよいようにしたいと思います。ei:

0 投票する
5 に答える
4011 参照

c# - 参照によってIDisposableオブジェクトを渡すとエラーが発生しますか?

IDisposableを実装するオブジェクトを破棄するための一般的なメソッドを作成しようとしています。DisposeObject()

元の参照が指すオブジェクトを破棄していることを確認するために、オブジェクトを参照渡ししようとしています。

しかし、私は言うコンパイルエラーが発生しています

'ref' 引数の型がパラメーターの型と一致しません

以下の (簡略化された) コードでは、 と の両方がIDisposable_Baz_Bar実装しています。

代替テキスト

質問は、

  1. このエラーが発生するのはなぜですか?
  2. それを回避する方法はありますか?

[更新] これまでに提供された回答から、IDisposable引数をnullに設定しない限り、を使用せずに値でオブジェクトを渡すことができますrefnullメソッド内で使い捨てオブジェクトを設定するかどうかについて、別の問題が発生していますDisposeObject

完全を期すための完全なソースは次のとおりです。

[結果]
内の 引数を null( obj = null;) にするコードを削除したDisposeObject ので、最終的なコードになりました。

0 投票する
4 に答える
676 参照

c# - 匿名変数に対して dispose が呼び出されますか?

例えば、

using ブロックはなく、using ブロックを使用する明確な方法も、Dispose() を呼び出す明確な方法もありません。もちろん、UnmanagedResourceUsingMemorySuckingPig は IDisposable を実装しています。

0 投票する
12 に答える
568 参照

c# - IDisposableに依存しないUsingパターンはありますか?

コードが呼び出されている時間を教えてくれる内部メッセージングシステムを作成したいと思っています。SystemMessageクラスにIDisposableを実装させるために、使いやすさを考えていました。

SystemMessageのコンストラクター中にタイムスタンプを設定し、Disposeが呼び出された場合、期間を把握できました。

問題は、オブジェクトをGC化したくないということです。MessageCollectionの一部として残しておいてほしい。

IDisposableの目的の機能を踏まずに、Usingステートメントの使いやすさを提供できるC#の別の構造はありますか?

0 投票する
1 に答える
14681 参照

linq-to-sql - C# Linq-to-Sql - IDisposable を使用して DataContext を破棄する必要があります

DB を処理するいくつかのメソッドがあり、それらはすべて呼び出すことから始まります

Linq2Sql DataContext オブジェクトは IDisposable を実装しているため、これを "using" で使用する必要がありますか?

何らかの方法でそれを使用することの意味は何ですか?