問題タブ [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 投票する
4 に答える
1843 参照

.net - IDisposableインターフェースはどのように機能しますか?

管理されていないリソースの割り当てを解除するために使用されることは理解していますが、Dispose実際にいつ呼び出されるかについては混乱しています。ブロックの最後で呼び出されることは知っていusingますが、オブジェクトがガベージコレクションされたときにも呼び出されますか?

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

c# - 私のコードはリストを適切にクリーンアップしますか?

PDF ファイルの操作を行うサードパーティ コンポーネントがあります。操作を実行する必要があるときはいつでも、ドキュメント ストア (データベース、SharePoint、ファイル システムなど) から PDF ドキュメントを取得します。少し一貫性を持たせるために、PDF ドキュメントをbyte[].

このサードパーティ コンポーネントは、使用する必要があるメイン メソッドの 1 つへのパラメーターとしてMemoryStream[](MemoryStream配列) を想定しています。

この機能を独自のコンポーネントにラップして、アプリケーション内のさまざまな領域でこの機能を使用できるようにしようとしています。私は本質的に次のことを思いついた:

私の「ラッパー」への呼び出しコードは次のようになります。

上記に関するいくつかの質問:

  1. メソッドのusing句はAddFileToManipulate()冗長で不要ですか?
  2. オブジェクトのDispose()メソッドで問題なくクリーンアップできていますか?
  3. これは の「許容される」使用法MemoryStreamですか? 一度にメモリ内に非常に多くのファイルがあるとは思っていません...おそらく合計1〜10のPDFページで、各ページは約200KBです。ASP.NET サイトをサポートするサーバー上で実行するように設計されたアプリ。
  4. コメント/提案はありますか?

コードレビューをありがとう:)

0 投票する
7 に答える
8552 参照

c# - IDisposableがすべてのクラスに広がるのをどのように防ぎますか?

これらの簡単なクラスから始めてください...

次のような単純なクラスのセットがあるとしましょう。

ABusには、がありDriver、にDriverは2つShoeのsがあり、それぞれShoeに。がありShoelaceます。すべて非常にばかげています。

IDisposableオブジェクトをShoelaceに追加します

後で、の一部の操作をShoelaceマルチスレッド化できると判断したのでEventWaitHandle、スレッドが通信するためのを追加します。だからShoelace今は次のようになります:

靴紐にIDisposableを実装する

しかし、MicrosoftのFxCopは、「次のIDisposableタイプのメンバーを作成するため、「Shoelace」にIDisposableを実装します:「EventWaitHandle」」と文句を言います。

さて、私は実装IDisposableします、Shoelaceそして私のきちんとした小さなクラスはこの恐ろしい混乱になります:

または(コメント提供者が指摘しているように)それ自体には管理されていないリソースがないため、およびデストラクタShoelaceを必要とせずに、より単純なdispose実装を使用できます。Dispose(bool)

IDisposableが広がるのを恐れて見てください

そうです、それは修正されました。しかし、FxCopは、をShoe作成すると文句を言うShoelaceので、そうするShoe必要がありIDisposableます。

そしてDriver作成するShoeので、するDriver必要がありますIDisposable。そして、そうしなければならないなどBusを作成します。DriverBusIDisposable

突然、への小さな変更が多くの​​作業を引き起こし、上司は、に変更を加えるためShoelaceになぜチェックアウトする必要があるのか​​疑問に思っています。BusShoelace

質問

この拡散をどのように防止しますIDisposableが、それでも管理されていないオブジェクトが適切に廃棄されるようにしますか?

0 投票する
7 に答える
56097 参照

c# - using ブロックの途中で戻る

何かのようなもの:

returnステートメントの適切な場所ではないと思いますよね?

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

c# - .designer.cs ファイルを編集することを本当に意味するユーザー コントロールで破棄しますか?

破棄する必要がある内部データ構造を持つユーザー コントロールの場合、そのコードを .designer.cs ファイルの Dispose メソッドに追加する正しい場所はありますか?それとも、代わりに使用する予定のイベントまたは何かがありますか?

編集: これは winforms ユーザー コントロールです。

0 投票する
10 に答える
7402 参照

c# - 誰が IDisposable パブリック プロパティを処分しますか?

SomeDisposableObject実装するクラスがある場合IDisposable:

そして、パブリック プロパティとしてAContainerのインスタンスを持つ という別のクラスがあります。SomeDisposableObject

AContainerそれから FxCop は、それも行われていると主張しますIDisposable

これは問題ありませんが、別のクラスがまだインスタンスへの参照を持っている可能性があるため、m_someObject.Dispose()から安全に呼び出す方法がわかりません。AContainer.Dispose()m_someObject

このシナリオを回避する最善の方法は何ですか?

AContainer.SomeObject(他のコードは常に null 以外の値を持つことに依存していると仮定すると、単にインスタンスの作成を の外に移動することAContainerはオプションではありません)

編集:一部のコメント投稿者が問題を見逃していると思うので、いくつかの例で拡張します。m_someObject.Dispose() を呼び出すDispose()メソッドを実装しただけでは、次のような状況が発生します。AContainer

それは役に立ちますか?

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

oracle - .NET で OracleConnection を閉じる方法

次の 2 つのオブジェクトがあるとします。

接続または Oracle を閉じるには、command.Dispose()、connection.Dispose()、またはその両方を呼び出す必要がありますか?

これで十分ですか:

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

c# - Page_Unload が常に実行され、Dispose() コードに適していると信じて大丈夫ですか?

Dispose() が確実に呼び出されるようにする方法として、try{}finally{} パターン、using(){} パターンに精通していますが、ASP.NET ページの場合、で作成されたオブジェクトを Dispose しても安全ですか? Page_Unload イベントのページ スコープ? 代わりに Page の Dispose() メソッドをオーバーライドすることは理にかなっていますか?

どのコードが Page_Unload イベントまたは Page Dispose() メソッドを発生させているかはわかりません。そのため、それが実行される保証が何であるかもわかりません。

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

c# - using 句はこのストリームを閉じますか?

私はどうやら悪いコーディングの習慣を身につけてしまったようです。これが私が書いてきたコードの例です:

using句が明示的に呼び出さClose()Dispose()StreamReaderFileStream閉じられると考えました。

私が抱えていた問題を解決できる唯一の方法は、上記のブロックを次のように変更することでした。

StreamReader最初のブロックで破棄して を閉じ、基になる も閉じる必要がありFileStreamますか? それとも、私は間違っていましたか?

編集

実際に問題のあるコード ブロックを投稿して、この問題の根底に到達できるかどうかを確認することにしました。私は今ちょうど興味があります。

句に問題があると思ったusingので、すべてを展開しましたが、それでも毎回コピーできません。このメソッド呼び出しでファイルを作成するので、ファイルのハンドルを開いているものは他にないと思います。Path.Combineまた、呼び出しから返された文字列が正しいことも確認しました。

0 投票する
16 に答える
167961 参照

c# - ファイナライズと破棄

Finalizeメソッドよりもメソッドを使用する人がいるのはなぜDisposeですか?

どのような状況で、FinalizeメソッドよりもDisposeメソッドを使用し、その逆を使用しますか?