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

ゴミ箱

C#でDisposeメソッドを実装しメモリを解放する

2020年04月08日

プログラムにおいて、確保したメモリ領域は使い終わった時点で必ず解放してあげる必要があります。今回はC#のDisposeメソッドを実装し、メモリを解放する方法を紹介していきます。本記事が参考になれば幸いです。

PG
あれ?C#では自動的にメモリを解放するのではなかったでしたっけ?
PL
はい、「ガベージコレクション」のことですよね。確かにメモリを解放してくれますが、これはあくまで対象内のリソースだった場合です。対象外のリソースは明示的に解放してあげる必要があるんですよ。

Disposeメソッドとは

Disposeメソッドとは、アプリケーションが使用するアンマネージリソース(非管理リソース)を解放するためのメソッドです。アンマネージリソースにはウィンドウやファイル、データベース接続、ネットワーク接続などが含まれます。

こういったアンマネージリソースを使ったアプリケーションの場合は、Disposeメソッドを呼び出し、使い終わった時点でリソースを解放する必要があります。リソースが解放されずに確保されたままでは、「メモリリーク」という現象が起きてしまうため注意しましょう。

C#でDisposeメソッドを実装しよう

Disposeメソッドの概要が分かったところで、さっそくDisposeメソッドを実装していきたいと思います。Disposeメソッドの使い方は2パターンあるのですが、今回は推奨されている「セーフハンドル」を使った実装方法を紹介していきます。

こちらが一般的な実装方法です。

PL
ちなみに、もう1つの実装方法は「Finalizeメソッドをオーバーライドするパターン」です。この場合は処理が複雑になる傾向にあるため、できれば今回紹介した方法で実装してください。
PG
そうなんですね。分かりました!推奨されているセーフハンドルを使う方法でやってみます。

外部リソースを使用するならメモリの解放を忘れずに

今回は、Disposeメソッドの概要や実装方法を紹介していきました。リソースの解放を忘れメモリリークが発生すると、予期せぬエラーが起きてプログラム自体が停止してしまう可能性があります。メモリリークを発生させないためにも、ぜひ今一度ご自身のプログラムを見直してみてください。


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

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

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

Search

Popular

reccomended

Categories

Tags