概要
using System.Linq; using UnityEngine; public class Example : MonoBehaviour { private static string [] m_list = { "フシギダネ", "フシギソウ", "フシギバナ", }; private void Update() { var name = "ピカチュウ"; // ここで return するので return; // ここの処理は実行されない var result = m_list.Where( c => c == name ); } }
例えば上記のようにローカル変数をキャプチャする処理を書いたとして、
そこの処理に到達する前に return したとしても、
GC Alloc は発生します
対策としては、
using System.Linq; using UnityEngine; public class Example : MonoBehaviour { private static string [] m_list = { "フシギダネ", "フシギソウ", "フシギバナ", }; private void Update() { var name = "ピカチュウ"; // ここで return するので return; // ここの処理は実行されない Hoge( name ); } private void Hoge( string name ) { var result = m_list.Where( c => c == name ); } }
このように変数キャプチャしているコードを別の関数に分けることで
GC Alloc は発生しなくなります
参考サイト様
https://www.slideshare.net/xin9le/dotnetperformancetips-170268354