.net column

.NET開発者のためのブログメディア

.NET Frameworkのメモリ管理方法を解説。メモリ使用量を減らす工夫とは

2020年04月16日

.NET Frameworkのメモリ管理で重要な役割を担うのが、ガベージコレクションです。ガベージコレクションは、アプリケーションで使用されなくなったメモリを自動で解放してくれます。ここでは、ガベージコレクションとメモリ使用量を減らす工夫について紹介していきます。

SE
.NET Frameworkで開発を進める場合は、ガベージコレクションが働くから特にメモリに関しては意識しなくても大丈夫ですよね?
PL
確かにガベージコレクションが搭載されてからは、メモリ解放の敷居は下がりました。しかし、ワンランク上のプログラマーを目指すならば、メモリを意識したコーディングは行っていただきたいものです。

.NET Frameworkのメモリ管理の概要

メモリは有限資源ですので、適宜解放を行わないとメモリリークが発生し、使用できるメモリがなくなってしまいます。自分だけのPCで稼働するアプリケーションなら、再起動をすればメモリリークは解消されますが、サーバーで稼働する基幹システムとなれば、そう簡単に再起動できるものではありません。

.NET Frameworkで開発できる言語では、メモリリークは発生しにくいといわれています。それはガベージコレクションが搭載されているからです。この機能は、不要になったメモリの領域を.NET Frameworkが自動で判断して、適切なタイミングで自動解放するものです。しかし、この解放するタイミングは開発者側で設定できません。あくまで.NET Frameworkが自動で行います。

また、すべてのリソースがガベージコレクションの対象かといったらそうではありません。対象は、.NET Frameworkが管理しているリソース(マネージリソース)のみです。管理外のリソース(アンマネージリソース)は、ガベージコレクションの対象外になるため注意が必要です。例えば、C#からWindows APIを直接呼び出して使用する場合は管理外リソースに該当します。その場合は、自らメモリを解放するためのコーディングを実装するようにしましょう。

メモリ使用量を減らす工夫

ここでは開発者自らがメモリを解放する方法などを紹介します。適宜メモリ解放を行い、メモリリークを事前に防ぎましょう。

Disposeメソッドを使用する

メモリを解放するメソッドです。

usingステートメントを使用する

このusingステートメントは、usingステートメントが終了するタイミングでDisposeメソッドを自動で呼び出します。

メモリ使用量監視ツールを使用する

Visual Studioに搭載されているメモリ使用量監視ツールを利用します。
メニューバーから「デバッグ」→「パフォーマンスプロファイラー」→「メモリ使用量」→「開始」を順に選択します。

上記の設定ができれば、常時メモリ使用量を監視できます。メモリリークが心配な場合は、このツールを活用してみても良いかもしれません。

SE
ガベージコレクションを起動させるタイミングって、自分たちで操作できなかったのですね。
PL
そうですね。なので、Disposeメソッドやusingステートメントをそれぞれ積極的に活用してメモリ管理を意識したコーディングを行うことをおすすめします。

メモリ管理はコーディングの基本

.NET Frameworkで動作する言語だけでなく、PHPやJavaなどの高水準言語にはガベージコレクションが搭載されています。しかし、アプリケーションを開発する際にメモリ管理は絶対に必要な分野となってきますので、自らのコーディングでメモリの使用量を減らす工夫を行うことを心がけましょう。


.NET分野でのキャリアアップをお考えの方は、現在募集中の求人情報をご覧ください。

求人一覧

また、直接のエントリーも受け付けております。

エントリー(応募フォーム)