7章オブジェクトの生存期間
.NETのマネージ実行モデルには、実行時のアプリケーションのメモリ管理のほとんどが自動化できるという利点があります。ここまで、キーワードnew
を使ってオブジェクトを生成し、そのオブジェクトが消費するメモリを明示的に解放していない例を数多く示してきました。
多くの場合、メモリを回収するために必要なアクションはありません。ランタイムがガベージコレクタ(GC)*1を提供しています。GCは、オブジェクトが利用されなくなったときを自動的に見つけて占有されていたメモリを回収し、新しいオブジェクトがそのメモリを利用できるようにする機構です。しかし、性能上の問題を引き起こしたり、GCの効果を完全に無効にしてしまうような利用パターンもあります。そこで、GCがどのように動作するかを理解しておくことは有益です。何日にもわたって長時間動作するプロセスには、特に重要です(短命なプロセスでは、わずかなメモリリークなら耐えられるかもしれません)。
*1 GCという頭字語は、この章を通じてガベージコレクタ機構と、ガベージコレクタが実行するガベージコレクションの両方を示すために使います。
GCはメモリを効率的に管理するよう設計されていますが、メモリ以外にも限られたリソースはあり、それに対処する必要があります。CLR内では少ないメモリフットプリントで済むものでも、データベース接続やOS APIからのハンドルのように相対的に高価なものを表現することがあります。GCでは、必ずしもこうしたリソースを効率的に扱うわけではありません。そこで、IDisposable
について説明します。IDisposable
は、メモリより早く解放される必要があるものに対処するよう設計されたインターフェイスです。 ...
Get プログラミングC# 第8版 now with the O’Reilly learning platform.
O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.