アンマネージドリソースは、解放するタイミングを自身で決める必要がある。
解放する際には消滅タイミングでの処理Dispose()を呼び出す。
目次
Dispose()が必要なクラスの見分け方
感覚で書いたり書かなかったりすると忘れた頃にやらかす為、自身で解放が必要か否かを見分ける方法として
IDisposableインターフェイスが実装されているかを調べる
アンマネージドリソースを実装する使用する型は、割り当てられたリソースが解放されるようにIDisposableインターフェイスを実装している。
UnityリファレンスのPublic関数内にDisposeがあるかを見る
察しはつくものの要る要らないの判断が出来る。
IDisposable.Disposeの実装を呼び出す2つの方法
try/finallyブロックを実装する
try{
}
catch(){
}
finally{
//対象がnullでなければDispose()を呼び出す
}
usingステートメントを使用する
確実に廃棄するためにusingステートメントを用いる
usingステートメントは、1つ以上のリソースを取得し、指定されたステートメントを実行し、オブジェクトを自動的に破棄する。
using(){}
using(/*リソースを取得*/)
{
//IDisposableインターフェイスを実装した処理
}
C#のusing
ステートメントでは、単一のステートメントで複数のリソースを取得できる
using(/*リソースを取得*/)
using(/*リソースを取得*/)
{
//IDisposableインターフェイスを実装した処理
}