問題タブ [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.
.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
それは役に立ちますか?
oracle - .NET で OracleConnection を閉じる方法
次の 2 つのオブジェクトがあるとします。
接続または Oracle を閉じるには、command.Dispose()、connection.Dispose()、またはその両方を呼び出す必要がありますか?
これで十分ですか:
c# - Page_Unload が常に実行され、Dispose() コードに適していると信じて大丈夫ですか?
Dispose() が確実に呼び出されるようにする方法として、try{}finally{} パターン、using(){} パターンに精通していますが、ASP.NET ページの場合、で作成されたオブジェクトを Dispose しても安全ですか? Page_Unload イベントのページ スコープ? 代わりに Page の Dispose() メソッドをオーバーライドすることは理にかなっていますか?
どのコードが Page_Unload イベントまたは Page Dispose() メソッドを発生させているかはわかりません。そのため、それが実行される保証が何であるかもわかりません。
c# - using 句はこのストリームを閉じますか?
私はどうやら悪いコーディングの習慣を身につけてしまったようです。これが私が書いてきたコードの例です:
using
句が明示的に呼び出さClose()
れDispose()
、StreamReader
もFileStream
閉じられると考えました。
私が抱えていた問題を解決できる唯一の方法は、上記のブロックを次のように変更することでした。
StreamReader
最初のブロックで破棄して を閉じ、基になる も閉じる必要がありFileStream
ますか? それとも、私は間違っていましたか?
編集
実際に問題のあるコード ブロックを投稿して、この問題の根底に到達できるかどうかを確認することにしました。私は今ちょうど興味があります。
句に問題があると思ったusing
ので、すべてを展開しましたが、それでも毎回コピーできません。このメソッド呼び出しでファイルを作成するので、ファイルのハンドルを開いているものは他にないと思います。Path.Combine
また、呼び出しから返された文字列が正しいことも確認しました。
c# - ファイナライズと破棄
Finalize
メソッドよりもメソッドを使用する人がいるのはなぜDispose
ですか?
どのような状況で、Finalize
メソッドよりもDispose
メソッドを使用し、その逆を使用しますか?