Unityで演出をスクリプトでタイミングの調整をしたいときにWaitForSecondsを使ったりすることがあります。
刹那的に使うのは問題ないですが、以下のようにWaitForSecondsを高頻度で生成すると問題が出てきます。
※そもそもこんな使い方はしないやろっていうツッコミは置いておきます
IEnumerator Hoge() { while (true) { Profiler.BeginSample("## Sample ##"); var wait = new WaitForSeconds(0.01f); Profiler.EndSample(); yield return wait; } }
このようにGC Allocに20Bほどゴミが溜まっていきます。
これは回避したいので、そもそもWaitForSecnodsをキャッシュしておく方法が考えられます。
IEnumerator Hoge() { var cachedWait = new WaitForSeconds(0.01f); while (true) { // キャッシュしてるWaitForSecondsを使う yield return cachedWait; } }
このようにWaitForSecondsをキャッシュして再利用するとゴミが無駄に増え続けることはありません。
※あくまで高頻度でWaitForSecondsを生成するときに使える最適化です。