質問: Disposeパターンにてマネージリソースとアンマネージリソースの解放方法に違いがありますが、`FileStream` はどちらとして扱うべきでしょうか?
回答: マネージリソースは .NET のランタイム(CLR)によって管理(マネージ)されているリソースで、その解放処理は**CLRが責任を持ちます**。また、その大半はGCの対象になっています。 一方アンマネージリソースはネイティブAPIで直接確保したリソースなどが該当します。これらの確保・解放にCLRは関与しないため、**利用者が責任を持って**解放する必要があります。 直接・間接的にアンマネージリソースを確保していようが、CLRの管理下にあるオブジェクトはマネージリソースと言えます。故に `FileStream` オブジェクトはマネージリソースです。 マネージリソースはいつかは解放されるわけですが、メモリを大量に消費するリソースや、排他的に確保されるリソースなど、自動的な解放を待っていられない場合があります。そのような場合に手動で解放するのが `IDisposable.Dispose()` です。 なのでこれが呼び出された場合には、そのオブジェクトが保持するアンマネージリソースのみならず、メモリを大きく消費するマネージリソースや、 `IDisposable` オブジェクトをすぐに解放する必要があります。これが Dispose パターンの `Dispose(bool)` 内で行うマネージオブジェクトの解放です。 * Dispose Pattern - MSDN Library.aspx) * CLRから見たリソースについて - 荒井省三のBlog - Site Home - MSDN Blogs