問題タブ [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.
c# - オブジェクトをいつ破棄する必要があるかを知るにはどうすればよいですか?
何かを処分する必要があるときはどうすればわかりますか?誰かが私が私のコードに私が処分する必要があるいくつかのオブジェクトを持っていたと言っています。何かを処分する必要があるとは思いもしませんでした(これはC#での最初の週です)。オブジェクトをいつ破棄する必要があるかを知るにはどうすればよいですか?私はhttp://msdn.microsoft.com/en-us/library/system.security.cryptography.hashalgorithm.aspxを使用していましたが、ページに破棄についての言及がないか、他のobjで言及されているのを見ました。 (SOの誰かによって)処分するように私に言いました。
IDisposableを継承する場合は必要ですが、継承する場合はどうすればわかりますか?
c# - デストラクタで dispose(false) を呼び出すのはなぜですか?
次に示すのは、典型的な破棄パターンの例です。
dispose の機能は理解していますが、デストラクタで dispose(false) を呼び出す理由がわかりません。定義を見ると、まったく何もしないのに、なぜこのようなコードを書くのでしょうか? デストラクタから dispose をまったく呼び出さないのは理にかなっているでしょうか?
.net - IDisposableインターフェースはどのように機能しますか?
管理されていないリソースの割り当てを解除するために使用されることは理解していますが、Dispose
実際にいつ呼び出されるかについては混乱しています。ブロックの最後で呼び出されることは知っていusing
ますが、オブジェクトがガベージコレクションされたときにも呼び出されますか?
c# - 私のコードはリストを適切にクリーンアップしますか?
PDF ファイルの操作を行うサードパーティ コンポーネントがあります。操作を実行する必要があるときはいつでも、ドキュメント ストア (データベース、SharePoint、ファイル システムなど) から PDF ドキュメントを取得します。少し一貫性を持たせるために、PDF ドキュメントをbyte[]
.
このサードパーティ コンポーネントは、使用する必要があるメイン メソッドの 1 つへのパラメーターとしてMemoryStream[]
(MemoryStream
配列) を想定しています。
この機能を独自のコンポーネントにラップして、アプリケーション内のさまざまな領域でこの機能を使用できるようにしようとしています。私は本質的に次のことを思いついた:
私の「ラッパー」への呼び出しコードは次のようになります。
上記に関するいくつかの質問:
- メソッドの
using
句はAddFileToManipulate()
冗長で不要ですか? - オブジェクトの
Dispose()
メソッドで問題なくクリーンアップできていますか? - これは の「許容される」使用法
MemoryStream
ですか? 一度にメモリ内に非常に多くのファイルがあるとは思っていません...おそらく合計1〜10のPDFページで、各ページは約200KBです。ASP.NET サイトをサポートするサーバー上で実行するように設計されたアプリ。 - コメント/提案はありますか?
コードレビューをありがとう:)
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
を作成します。Driver
Bus
IDisposable
突然、への小さな変更が多くの作業を引き起こし、上司は、に変更を加えるためShoelace
になぜチェックアウトする必要があるのか疑問に思っています。Bus
Shoelace
質問
この拡散をどのように防止しますIDisposable
が、それでも管理されていないオブジェクトが適切に廃棄されるようにしますか?
c# - using ブロックの途中で戻る
何かのようなもの:
returnステートメントの適切な場所ではないと思いますよね?
c# - .designer.cs ファイルを編集することを本当に意味するユーザー コントロールで破棄しますか?
破棄する必要がある内部データ構造を持つユーザー コントロールの場合、そのコードを .designer.cs ファイルの Dispose メソッドに追加する正しい場所はありますか?それとも、代わりに使用する予定のイベントまたは何かがありますか?
編集: これは winforms ユーザー コントロールです。
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
それは役に立ちますか?