1. ホーム
  2. c#

[解決済み] .NETのMemoryStreamを閉じないとメモリリークが発生しますか?

2022-08-29 21:39:09

質問

次のようなコードがあります。

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

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

割り当てたMemoryStreamが何らかの原因で後で廃棄されなくなることはないのでしょうか?

これを手動で閉じるように主張しているピアレビューがあるのですが、彼の指摘が妥当かどうかを判断するための情報を見つけることができません。

どのように解決するのですか?

Disposableなものは、常にDisposeする必要があります。あなたは using 文の中で bar() メソッドで ms2 がDisposedになることを確認します。

最終的にはガベージコレクタによってクリーンアップされますが、Disposeを呼び出すことは常に良い習慣です。もしあなたのコードでFxCopを実行したら、警告としてフラグを立てるでしょう。