[解決済み] MemoryStream.Close()またはMemoryStream.Dispose()
質問
どちらを呼べばいいのでしょうか?
両方を呼び出す必要があるのでしょうか。
どちらかをすでに呼び出した場合、もう一方は例外を投げるのでしょうか?
どのように解決するのですか?
Close()
そして
Dispose()
で呼び出された場合
MemoryStream
で呼び出された場合、2つのことをするためだけに機能します。
- オブジェクトの将来の偶発的な使用で例外が発生するように、オブジェクトに破棄のマークを付けます。
- 可能性として 1 は管理されたオブジェクトへの参照を解放し、GCの実装によってはGCの仕事を少し簡単にすることができます。 (今日の GC アルゴリズムでは実際の違いはないので、これは学術的な議論のためのポイントであり、実世界に大きな影響を与えません)。
MemoryStream
はディスポーザブルなアンマネージドリソースを持っていないので、技術的にはディスポーザブルにする必要はありません。 をディスポーザブルにしないことの効果は
MemoryStream
への参照を削除するのとほぼ同じことです。
byte[]
-- への参照を削除するのとほぼ同じことであり、GCはどちらも同じようにクリーンアップします。
どちらを呼び出せばいいのでしょうか? 両方を呼び出す必要があるのでしょうか?
その
Dispose()
ストリームのメソッド
に直接委ねる。
Close()
メソッドに直接委譲します。
2
というように、どちらも全く同じことをします。
すでにどちらかを呼び出していた場合、もう一方は例外を投げるのでしょうか?
このような場合
のドキュメントは
IDisposable.Dispose()
を呼び出しても安全であると明記しています。
Dispose()
を複数回、任意のオブジェクトに対して
3
. (もし特定のクラスでそうでない場合は、そのクラスは
IDisposable
インターフェースを実装していることになり、これはバグとなります)。
を破棄するかどうかは大きな違いではありません。
MemoryStream
を捨てようと捨てまいと、大きな違いはありません。 それが持つ唯一の本当の理由は
Close
/
Dispose
メソッドを継承しているためです。
Stream
をサポートするストリームの契約の一部として、これらのメソッドを要求しているからです。
を行う
は、管理されていないリソース(ファイルやソケットディスクリプタなど)を持つストリームをサポートするために、これらのメソッドを契約の一部として要求しています。
1
Monoの実装
を解放しません。
byte[]
の参照を解放しません。 Microsoft の実装がそうであるかどうかはわかりません。
2 "このメソッドはCloseを呼び出し、次にStream.Dispose(Boolean)."を呼び出します。
3 "オブジェクトのDisposeメソッドが複数回呼び出された場合、オブジェクトは最初の1回以降のすべての呼び出しを無視しなければなりません"。
関連
-
[解決済み】「The breakpoint will not currently be hit」を改善するには?このドキュメントにはシンボルが読み込まれていません。" という警告はどうすれば改善されますか?
-
[解決済み】「namespace」なのに「type」のように使われる。
-
[解決済み] 複数の例外を一度にキャッチする?
-
[解決済み] C#でenumからint値を取得する
-
[解決済み] なぜList<T>を継承しないのですか?
-
[解決済み] List<T>をオブジェクトのプロパティでソートする方法
-
[解決済み] IEnumerable<T> と IQueryable<T> を比較する。
-
[解決済み] あるコンストラクタを別のコンストラクタから呼び出す
-
[解決済み] ファイルが使用中であるかどうかを確認する方法はありますか?
-
[解決済み】大文字・小文字を区別しない「Contains(string)
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】Ajax処理で「無効なJSONプリミティブ」と表示される件
-
[解決済み】文字列が有効な DateTime " format dd/MM/yyyy " として認識されなかった。
-
[解決済み】SmtpException: トランスポート接続からデータを読み取れません:net_io_connectionclosed
-
[解決済み] DBNullから他の型にオブジェクトをキャストすることができない
-
[解決済み】ORA-01008: すべての変数がバインドされていません。これらはバインドされています。
-
[解決済み】2年前のMSDateを把握する【クローズド
-
[解決済み】エラー「必要なフォーマルパラメータに対応する引数が与えられていない」を解決する?
-
[解決済み】ユーザー設定値を別のユーザー設定値で設定する
-
[解決済み】データが存在しないのに読み込もうとする試みが無効である
-
[解決済み] .NETのMemoryStreamを閉じないとメモリリークが発生しますか?