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

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

c# - 抽象基本クラスの TcpClient フィールドが常に破棄されている

TcpClient フィールドを持つ抽象基本クラスがあります。

接続をセットアップする方法があります。

そして、データをリクエストするメソッドより:

requestRawData など、他にもいくつかあります...非常に特定のハードウェア通信プロトコルに必要ですが、それはこの質問の一部ではありません。

次に、このクラスから派生したクラスがあり、基本クラスのメソッドをオーバーライドします。

コードは例外なく動作しますが、setupConnection メソッドが呼び出されるたびに TcpClient インスタンス (tcpClient) が破棄されているように見えるため、新しいインスタンスが作成され、connect メソッドが再度呼び出され、通信プロセスが非常に遅くなります。

注: 子クラスのパブリック メソッドは requestData メソッドを呼び出し、このライブラリを使用して開発者から多くの詳細を抽象化します。

SetDevicePower(byte PowerLevel)、QueryDeviceName() など...

次のようなコード:

connect メソッドが 2 回呼び出される原因となります...呼び出しの間に破棄されるのはなぜですか?

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

c# - C# の使い捨てシングルトン

「static readonly T Instance = new T();」を使用するシングルトンがあります。パターン。しかし、T が使い捨てであり、実際には単体テストのために破棄する必要がある場合に遭遇しました。このパターンを変更して使い捨てシングルトンをサポートするにはどうすればよいですか?

私が望むインターフェースは次のようなものです:

注 - もちろん、パターンはスレッドセーフでなければなりません。

編集- 本番コードの目的で、これは真のシングルトンです。問題は、いくつかのファイルをロックすることです。そのため、単体テストでのクリーンアップのために、それを破棄する必要があります。

可能であれば、再利用できるパターンも希望します。

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

c# - IDisposableを破棄するWinforms

dispose と IDisposable を正しく使用するための優れた記事やチュートリアルを持っている人はいますか? これをジュニア開発者に説明しようとしていて、追加の資料や例などを入手したかった.

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

.net - .NET でオブジェクトを破棄する必要があるのはいつですか?

一般的なコードの場合、本当にオブジェクトを破棄する必要がありますか? ほとんどの場合、それを無視できますか、それとも、100% 不要になったと確信している場合は、常にオブジェクトを破棄することをお勧めしますか?

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

dispose - SqlDataReader: このシナリオでは、リーダーは閉じられますか?

継承した古い .NET 1.1 プロジェクトの DataReaders をクリーンアップしています。

以前の開発者は、ほとんどの DAL メソッドが SqlDataReaders を返すような方法でデータ アクセス レイヤーをコーディングしました (したがって、.Close() メソッドまたは .Dispose() メソッドを適切に呼び出すのは呼び出し元に任されていました)。

ただし、呼び出し元が返された SqlDataReader をキャッチしていない (したがって、適切に破棄していない) 状況に遭遇しました。以下のコードを参照してください。

データ アクセス方法:

呼び出しコード:

ご覧のとおり、呼び出し元のメソッドは、返された SqlDataReader を受信/キャッチしません。それでどうなるの?その SqlDataReader はまだそこにあり、開いていますか? それとも、何も対処されていないため、自動的にガベージコレクションが行われますか?

これをデバッグしてテストする方法が思いつきませんでした。誰かに素晴らしいアイデアや提案があれば。

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

c# - System.ComponentModel.Component から派生したクラスで Dispose() を実装する

Component から派生するクラスを作成しました。

Visual Studio が次のコードを挿入しているのを見ました。

MyComponentのメンバーがありDataSet、おそらく を実装する他のメンバーがいくつかありますIDisposableDispose()適切にクリーンアップされるようにするには、メソッドで何を変更する必要がありますか? 助けてくれてありがとう。

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

c# - DisposeBase 抽象クラスを実装できますか?

すべてのクラスで Dispose パターンを再コーディングする代わりに、 DisposableBase 基本クラスを使用することで、キャッチまたは隠れた問題はありますか?

なぜ誰もがそのような関連クラスを使用しないのですか?

編集

  1. 当然、IDisposable を実装するクラスのみを意味していました

  2. 継承のオプションを使い果たしていることはわかっていますが、代償を払うつもりです (少なくともできる限り、それ以外の場合は害がない場合)。

  3. クラスを封印できるときはそうしますが、継承階層のベースを使い捨てにしたい場合があります。

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

winforms - .NET winform のデバッグ中に SerialPort から ObjectDisposedException が発生する原因は何ですか?

Vista SP1 Visual Studio 2008 SP1 .NET 3.5 SP1 C#

SerialPort オブジェクトをプライベート変数として使用する、私が遊んでいる winforms アプリがあります。アプリケーションをコンパイルして実行すると、うまく機能します。また、ブレークポイントなしでデバッグ モードで実行しても機能します。ブレークポイントで停止してコードをステップ実行しようとすると、90% の確率で、次の詳細を含む「未処理の例外が発生しました」というダイアログが表示されます。

System.ObjectDisposedException は未処理でした Message="Safe ハンドルが閉じられました" Source="mscorlib" ObjectName="" StackTrace: at Microsoft.Win32.Win32Native.SetEvent(SafeWaitHandle handle) at System.Threading.EventWaitHandle.Set() at System. InnerException:

イライラするのは、シリアル関連のコードをまたぐ必要がないことです! 私はポートで何かをしなければなりませんでした。つまり、文字列を読み取り、文字列を操作し、2 つの数値を足し合わせてから、BANG を実行します。

繰り返しますが、これは、デバッグしない場合、またはブレークポイントなしでデバッグする場合に問題なく機能します。CLRが別のスレッドでSerialStreamを破棄するブレークポイントで停止することについて何かがあるようです。

これを引き起こす USB デバイスの改修に関する問題について、オンラインで多くのおしゃべりがあります。しかし、私は COM1 の内蔵マザーボード ポートを使用しています。

私は.NET 2.0でこの問題があったとは思わないので、それに戻らなければならないかもしれません...

コードを投稿する前に、アプリケーションをかなり単純化する必要がありますが、デバッガーでこのような動作を見たことがありますか?

本当にありがとう!

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

c# - C# USING キーワード - 使用する場合と使用しない場合は?

USING ブロックでラップする必要がある場合とラップしない場合を知りたいです。

私が理解していることから、コンパイラはそれを try/finally に変換し、finally はオブジェクトで Dispose() を呼び出します。

私は常にデータベース接続とファイル アクセスの周りで USING を使用していますが、100% 理解しているというよりも、習慣から外れています。リソースを制御する Dispose() オブジェクトを明示的に (または使用して) 使用する必要があることはわかっています。これにより、CLR が気に入ったときにいつでも解放されるのではなく、即座に解放されるようになります。

IDisposables は、範囲外になったときに破棄されませんか?

オブジェクトが Dispose を使用して自分自身を整理する場合にのみ、USING を使用する必要がありますか?

ありがとう

編集: USING キーワードに関する他の投稿がいくつかあることは知っていますが、CLR に関する回答と、内部で何が起こっているのかについてもっと興味があります。

アンドリュー

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

.net - この Image インスタンスを破棄する必要がありますか?

シンプルなイメージ デバッガー ビジュアライザーを作成しています。コードは以下です。Image インスタンスを手動で破棄する必要があるかどうかわかりません。私はWindowsフォームウィンドウと動的画像を含むPictureBoxを作成しているため..フォームが終了するときに、これを破棄するために特別なコードを追加する必要がありますか?

ここにコードがあります..

助けてくれてありがとう:)