実家に帰ってた時、偶然にもメモリリークしているテクスチャがどこにあるのかが表示されるようになったので色々原因を突き止めてました。
その中で一番重要な点を書いておきます。(今後の再発防止)
(CActivity管理下のクラス)On活性化、OnManagedリソースの生成メソッドで再侵入検知をしていない
解放せず同じCTexture変数に再度テクスチャを生成するとメモリリークが発生します。
つまり既に生成されているかチェックしていないにも関わらず、先に挙げた2つのメソッドに侵入するとメモリリークが何回も発生するわけです。
CActivityには活性化したかのフラグか存在しているので、
if( !this.活性化していない) {
}
このように書いてやるのが正解です。
これは普通のCTextureも同じで、選曲画面で画面からはみ出した曲名テクスチャをきちんと解放していなかったのがだいぶまずかったです。
さらにバー中央の曲名テクスチャに関しても、生成前に一度解放処理を行ってから生成するようにしました。
解放処理が挟まると重くなると見せかけて、(あくまでも自分の環境ですが)こちらのほうが速いという新事実。
それからC# 6.0以降は「Null条件演算子」なるものが使えます。
this.txTEST?.Dispose();
現行版ではヘルパーメソッドとして「CDTXMania.t安全にDisposeする( ref Object)」を用いているのですが、この演算子でショートカットできるというわけですね。
ただ全部のコード全箇所での変更にはだいぶ時間がかかるので、TJAP2fPCやVer.Kでの最適化はもう少し後になるかと。
(※FROM先生のDTXMatixxを参考にしました。)
PR