← C#

LESSON / ARTICLE

IDisposableとリソース管理

IDisposableとusingを使い、外部リソースを確実に解放する方法を学びます。

IDisposable

ファイル、ストリーム、データベース接続などは、マネージドメモリ以外の資源を保持することがあります。IDisposableは、利用者が明示的にリソースを解放するための規約です。

using var reader = new StreamReader("input.txt");
string? line = reader.ReadLine();
Console.WriteLine(line);

using宣言を使うと、スコープを抜けるときにDisposeが呼び出されます。例外が発生した場合も、適切に破棄されます。

Disposeとファイナライザー

Disposeは決定的なタイミングでリソースを解放するために呼び出します。ファイナライザーはGCが回収する過程で呼ばれる可能性がありますが、実行時期は保証されません。

所有権

リソースを誰が所有し、誰がDisposeするのかを明確にします。借りているだけのリソースを勝手に破棄しないよう、APIの契約を確認してください。