UnityのTextureクラスには破棄するためのメソッドが用意されていない。基本的には参照が消えたら勝手に破棄されるようなのだが、UnityのProfilerでよーく確認してたら参照が消えてもメモリが解放されない状態になっていた。調べていくとどうやらUnityのTextureは内部でUnity側がキャッシュしてるよう。キャッシュがどのタイミングでクリアされるか分からないが、大容量のデータを読み込む際には明示的に破棄して解放してやりたい。
Textureの破棄は、最初以下のようにしてた。
Resources.UnloadAsset(texture);
しかしこれもProfilerで確認してるとちゃんとクリアされてないよう。
いろいろ調べた結果、以下のようにすると上手くいった。
MonoBehaviour.Destroy(texture);
Unity内部でどのように処理されてるかは不明だが、Destroyの方がちゃんと破棄処理を行ってくれるよう。Destroyは参照先の情報も破棄するうんぬんの情報をどこかで見た気がするので、精度が高いのかな?
ただ上記はエディタ上でしか確認してないので、実機上ではどうなるか不明。自分が確認した限りAndroidは上記を行わなくても上手くメモリ解放されてた気がする。のちのちちゃんと調べた方がいいかもな。