ストリーム オブジェクトの適切な破棄: Close() と Dispose()
プログラミングでは、ストリームなどのリソースを効率的に管理することが重要です。 Stream、StreamReader、StreamWriter などのストリーム クラスは IDisposable インターフェイスを実装し、リソースを解放するための 2 つのメソッド、Close() と Dispose() を提供します。この記事は、それらの役割とベスト プラクティスを明確にすることを目的としています。
Close() と Dispose()
Close() メソッドはストリームを明示的に閉じますが、Dispose メソッドはストリームを明示的に閉じます。 () メソッドは、内部でリソースの解放を処理する Dispose(bool) メソッドを呼び出します。 Close() メソッドは Stream クラスから継承され、派生ストリーム タイプごとに異なる方法で実装されます。
仕組み
デバッガーまたは Reflector.NET を使用して、これらのメソッドの実装を詳しく調べることができます。両方の Close() メソッドは最終的に Dispose(true) を呼び出します。これにより、リソースが解放され、オブジェクトがそれ以上使用されなくなります。
ベスト プラクティス
Close() と同等であることを考慮すると、と Dispose() の場合、選択は要約すると次のようになります。
Using ( ... ) Block:
Close() と Dispose() の組み合わせ:
Example
提供されたコード スニペットでは、適切なリリースを保証するために using ブロックが採用されています。ただし、Close() メソッドも呼び出されますが、これは厳密には必要ありません。
using (Stream responseStream = response.GetResponseStream()) { using (StreamReader reader = new StreamReader(responseStream)) { using (StreamWriter writer = new StreamWriter(filename)) { // Stream processing... writer.Close(); // Explicit close } reader.Close(); // Explicit close } }
推奨事項
コードの可読性を高めるために、次のアプローチをお勧めします。
using (var stream = ...) { /* code */ stream.Close(); // Explicit close }
このメソッドは、Close() の明確さと、using ブロックのリソース解放保証を組み合わせています。
以上がClose() と Dispose(): C# のストリーム オブジェクトにはどちらのメソッドを使用する必要がありますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。