【Unity,C#】外部リソースを使用する時の注意【メモ】

アンマネージドリソースは、解放するタイミングを自身で決める必要がある。

解放する際には消滅タイミングでの処理Dispose()を呼び出す。

Dispose()が必要なクラスの見分け方

感覚で書いたり書かなかったりすると忘れた頃にやらかす為、自身で解放が必要か否かを見分ける方法として

IDisposableインターフェイスが実装されているかを調べる

アンマネージドリソースを実装する使用する型は、割り当てられたリソースが解放されるようにIDisposableインターフェイスを実装している。

UnityリファレンスのPublic関数内にDisposeがあるかを見る

察しはつくものの要る要らないの判断が出来る。

Dispose()が必要な例

IDisposable.Disposeの実装を呼び出す2つの方法

try/finallyブロックを実装する

try{
 
}
catch(){

}
finally{
 //対象がnullでなければDispose()を呼び出す
}

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

確実に廃棄するためにusingステートメントを用いる

usingステートメントは、1つ以上のリソースを取得し、指定されたステートメントを実行し、オブジェクトを自動的に破棄する。

using(){}

using(/*リソースを取得*/)
{
 //IDisposableインターフェイスを実装した処理
}

C#のusingステートメントでは、単一のステートメントで複数のリソースを取得できる

using(/*リソースを取得*/)
using(/*リソースを取得*/)
{
 //IDisposableインターフェイスを実装した処理
}
補:一般的なアンマネージドリソースの種類

ファイル

ウィンドウ

ネットワーク接続

データベース接続などのオペレーティング システム

参考

外部リソースの解放には using ステートメントを使う

【C#】Disposeとは?

IDisposable を実装するオブジェクトの使用

【Unity】破棄を忘れずに行うためにIDisposableをうまく利用する方法【UniRx】

アンマネージ リソースのクリーンアップ

タイトルとURLをコピーしました