C#メモリ操作
C# ガベージコレクション:宇宙仮面の C# ProgrammingUnityでのメモリ管理について色々とWeb上のドキュメントを読んでいたらこの記事がよく参照されているようです。じゃあ自分のプロジェクトではどの方針を採用するかということなのですが、かなり小規模なので、不要なリソースを自分で特定して任意のタイミングでGCを呼ぶという方針にしたいと思います。解放するリソースが増えそうだとusingを使う方針が良さそうですが。実際のところでいえば一番大きなデータオブジェクトでも1Mbyteも無いはずなのでそれほど気にすることはなく、完全にMonoに任せるという方針もありかなとは思いました。ただOSサイドからするとMono環境も一種のアプリで、Monoが非Monoアプリのことまで考慮してメモリマネージメントをしているわけでは無いでしょうから(間違っていたら教えて下さい)、メモリを食い過ぎて非Monoアプリに迷惑をかけるような状況になるのもいかがなものかなと思われました。そこで、・明らかに不要と判断できるリソースは随時Nullを参照・UIのタブ切り替えはユーザーにとって遅延を感じにくいタイミングなのでその時点でGCを実行という方針を採用することにします。NET TIPS ガベージ・コレクタを明示的に動作させるには?こちらのコードを参考にして以下のコードでテストしてみました。
"GCとDisposeの違い
usingは通常、IDisposable.Dispose()を確実に呼ぶための仕組みで、参照をnullにすることやGCを起動することとは異なります。参照を外しても、他の場所から参照されていればGCの回収対象にはなりません。手動GCによる停止時間もあるため、本文は当時の小規模プロジェクトの採用方針として読み、現在のプロジェクトではプロファイラで確かめて判断します。