匿名函数
public class TestGC : MonoBehaviour
{
public class Student
{
public string name;
}
void Update ( )
{
UnityEngine. Profiling. Profiler. BeginSample ( "*** AnoymousFunctionWithoutArg ***" ) ;
Action method = ( ) = > { Debug. Log ( "hello world" ) ; } ;
UnityEngine. Profiling. Profiler. EndSample ( ) ;
UnityEngine. Profiling. Profiler. BeginSample ( "*** AnoymousFunctionWithoutArg int ***" ) ;
int a = 12 ;
Action method2 = ( ) = > { Debug. Log ( "hello world" ) ; Debug. Log ( a) ; } ;
UnityEngine. Profiling. Profiler. EndSample ( ) ;
UnityEngine. Profiling. Profiler. BeginSample ( "*** AnoymousFunctionWithoutArg obj ***" ) ;
Student stu = new Student ( ) { name = "jiayajie" } ;
Action method3 = ( ) = > { Debug. Log ( stu. name) ; } ;
UnityEngine. Profiling. Profiler. EndSample ( ) ;
UnityEngine. Profiling. Profiler. BeginSample ( "*** AnoymousFunctionWithoutArg member ***" ) ;
Action method4 = LogName;
UnityEngine. Profiling. Profiler. EndSample ( ) ;
UnityEngine. Profiling. Profiler. BeginSample ( "*** AnoymousFunctionWithoutArg member param ***" ) ;
Action method5 = LogId;
UnityEngine. Profiling. Profiler. EndSample ( ) ;
UnityEngine. Profiling. Profiler. BeginSample ( "*** AnoymousFunctionWithoutArg member stu ***" ) ;
Action method6 = LogStu;
UnityEngine. Profiling. Profiler. EndSample ( ) ;
UnityEngine. Profiling. Profiler. BeginSample ( "*** AnoymousFunctionWithoutArg method param ***" ) ;
Do ( LogName) ;
UnityEngine. Profiling. Profiler. EndSample ( ) ;
}
void Do ( Action bigOne)
{
}
void LogName ( )
{
Debug. Log ( "Hello world" ) ;
}
int id = - 1 ;
void LogId ( )
{
Debug. Log ( $"Hello world_{id}" ) ;
}
Student student = new Student ( ) { name = "houzhimin" } ;
void LogStu ( )
{
Debug. Log ( $"Hello world_{student.name}" ) ;
Debug. Log ( $"Hello world_{id}" ) ;
}
}
结论
匿名函数在不引用外部变量的情况下不会产生GC Action func = ()=>{Debug.Log("A"); }
成员函数赋值给委托变量的时候无论是否引用变量都会GCAction func = method;
当把成员函数赋值给函数参数的时候会产生GCLogName(method)
当委托执行的时候也会产生GCfunc.Invoke()