.NET では、メモリ内のバイナリ データを処理するために MemoryStream クラスがよく使用されます。 MemoryStreams を使用する場合、ストリームが明示的に閉じられていない場合のメモリ リークに関する一般的な質問が生じます。
メモリ リークが発生する可能性があるかどうかを理解するために、次のコード スニペットを調べてみましょう:
MemoryStream foo() { MemoryStream ms = new MemoryStream(); // Write data to ms return ms; } void bar() { MemoryStream ms2 = foo(); // Perform operations on ms2 return; }
このシナリオでは、foo() で作成された MemoryStream が返され、最終的に bar() の ms2 によってポイントされます。問題は、たとえ明示的に閉じられていないとしても、MemoryStream が適切に破棄されるかどうかです。
答えは、現在の実装ではメモリ リークは発生しないということです。メモリーストリーム。 Dispose() を呼び出しても、MemoryStream のメモリのクリーンアップは高速化されません。 Dispose() はストリーム上でのさらなる読み取り/書き込み操作を防ぎますが、基礎となるメモリ割り当てには影響しません。
一般に、次の理由により Dispose() を呼び出すことは良い習慣であると考えられています。
ただし、MemoryStream から別のストリームに切り替える必要がまったくないことが確実な場合は、Dispose を呼び出さないことも選択できます。 () メモリリークを引き起こすことはありません。
以上が.NET で閉じられていない MemoryStream はメモリ リークを引き起こしますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。