Resources.LoadのBestPracticesの検証(2,使用している状態で消してみる
の続き
UnityのAddComponentのつくり上、
いろんなところで複数回よばれ、いろんなところで解放
が呼ばれるはずなので軽く
2個生成して2個削除したときどうなるかを見てみる。
今回は前回のソースに
protected override void OnLoadComplete(Object _object)
{
~
Debug.Log("OnLoadComplete:" + _object.GetInstanceID() + ":" + _object.GetHashCode());
}
を出力してロードしたものは違うものなのか?同じものなのか?
を見る
GameObject2個生成コンソール出力
GameObject2個生成プロファイラー
GameObject1個目解放
GameObject2個目解放
画像においては複数Resources.Loadを呼んでも読み込まれた実態は1つのように見える
解放については1個目の開放ではTextureSprite両方とも使われているので解放に失敗
2個目でSpriteは解放できたがTextureは解放できずと前回と同じ結果になった。
途中結果
最善の方法は使わないこと
について取得したら解放するとソースに書いても意図とした取得、解放にはならず
メモリ管理が困難になる
になる
まともに使うためにはかなり無駄な労力を費やしそうなのが見えてきた。
単純なだけにソースレビューするだけでなく実機確認及びProfiler確認までしないと
この部分の問題を発見することは非常に困難と見える。
Loadした分Unloadすればよいという挙動ではないのでちゃんと解放するには難儀しそうな印象。
実はResources.UnloadはResources.Loadで得たUnityEngine.Objectを引数指定すれば
解放されるものではないでは?ということも含め検証を進めていくとしよう。
解放についての検証はまた次回