1. ホーム
  2. c#

[解決済み] アンマネージド・リソースとは、具体的にどのようなものですか?

2022-04-21 03:25:59

質問

アンマネージド・リソースについて知りたいのですが。 どなたか基本的なことを教えてください。

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

マネージド・リソースとは、基本的にガベージコレクタによって管理される、"マネージド・メモリ"のことを指します。管理されたオブジェクト(管理されたメモリを使用する)への参照がなくなったとき、ガベージコレクタは(最終的に)そのメモリを解放します。

そして、アンマネージド・リソースとは、ガベージコレクタが知らないものすべてを指す。たとえば、以下のようなものです。

  • オープンファイル
  • ネットワーク接続を開く
  • アンマネージドメモリ
  • XNAの場合:頂点バッファ、インデックスバッファ、テクスチャなど。

通常、これらのアンマネージドリソースは解放したいものです。 以前 を使用すると、それらを管理しているオブジェクトへの参照をすべて失うことになります。これを行うには Dispose を使うか、(C#では) using を呼び出すことを処理するステートメントです。 Dispose を使用します。

を怠ると Dispose このような場合、ガベージコレクタは、そのリソースを含むオブジェクトがガベージコレクタされるときに、最終的にそのリソースを処理します(これが最終化です)。しかし、ガベージコレクタはアンマネージド・リソースについて知らないので、それらを解放する必要がどの程度あるのかを知ることができません - したがって、あなたのプログラムのパフォーマンスが低下したり、リソースが完全になくなったりする可能性があります。

アンマネージドリソースを扱うクラスを自分で実装する場合、そのクラスは DisposeFinalize を正しく表示します。