.NET の MemoryStream が閉じられていない場合、メモリ リークが発生しますか? 質問する

.NET の MemoryStream が閉じられていない場合、メモリ リークが発生しますか? 質問する

次のコードがあります:

MemoryStream foo(){
    MemoryStream ms = new MemoryStream();
    // write stuff to ms
    return ms;
}

void bar(){
    MemoryStream ms2 = foo();
    // do stuff with ms2
    return;
}

割り当てた MemoryStream が、後で何らかの理由で破棄できなくなる可能性はありますか?

ピアレビューで、これを手動で閉じるように要求されていますが、彼の主張が正しいかどうかを判断するための情報が見つかりません。

ベストアンサー1

少なくとも現在の実装では、何も漏洩することはありません。

Disposeを呼び出しても、MemoryStreamが使用するメモリのクリーンアップが速く行われるわけではありません。意思呼び出し後にストリームが読み取り/書き込み呼び出しを実行できないようにします。これは、役立つ場合と役立たない場合があります。

もしあなたが一度もないMemoryStreamから別の種類のストリームに移動したい場合は、Disposeを呼び出さなくても害はありません。しかし、一般的には良い習慣です。する別のストリームを使用するように変更する場合、早い段階で簡単な方法を選択したために、見つけにくいバグに悩まされることは避けたいものです。(一方で、YAGNI の議論もあります...)

とにかくそれを行うもう一つの理由は、新しい実装が5月Dispose 時に解放されるリソースを導入します。

おすすめ記事