.NET のマネージド リソースとアンマネージド リソースの意味は何ですか?

「管理されていないリソース」という用語は通常、ガベージ コレクターの直接の制御下にない何かを説明するために使用されます。 .たとえば、データベース サーバーへの接続を開くと、サーバー上のリソース (接続を維持するため) が使用され、プロバイダーが完全にマネージ コードで記述されていない場合は、クライアント コンピューター上のその他の非 .net リソースが使用される可能性があります。

これが、データベース接続のようなものに対して、次のようにコードを書くことをお勧めする理由です:

using (var connection = new SqlConnection("connection_string_here"))
{
    // Code to use connection here
}

これにより .Dispose() が接続オブジェクトで呼び出され、管理されていないリソースが確実にクリーンアップされるようにします。


管理対象リソースは、純粋な .NET コードであり、ランタイムによって管理され、その直接制御下にあるリソースです。

管理されていないリソースは、管理されていないリソースです。ファイル ハンドル、固定メモリ、COM オブジェクト、データベース接続など


Q&A アンマネージド リソースとは 1ブルース・ウッド 以下を投稿しました:

コメント: 管理されていないリソースを直接保持していない可能性があります .ただし、管理されていないリソースを間接的に保持している可能性があります System.IO.FileStream などの管理された「ラッパー クラス」を介して。このようなラッパー クラスは、通常、IDisposable を (直接または継承を介して) 実装します。

コメント: IDisposable を実装することで それによって Dispose() を提供します クラスのユーザーが deterministic でリリースできるようにします。 クラスのインスタンスによって保持される管理されていないリソースを作成します。

1 リンクはもともと Sachin Shanbhag の回答で共有されていました。 2005-11-17 日付の引用資料。引用された内容を軽くコピー編集したことに注意してください.