匿名函数访问外部变量有gc
Posted sifenkesi
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了匿名函数访问外部变量有gc相关的知识,希望对你有一定的参考价值。
直接上测试代码:
using System.Collections; using System.Collections.Generic; using UnityEngine; public class TestStructGC : MonoBehaviour { public struct StructDef { public System.Action act; public StructDef(System.Action callback) { act = callback; } } public int memberValue; private void Update() { // 使用匿名函数,不访问外部函数,0 gc { UnityEngine.Profiling.Profiler.BeginSample("*** Test1 ***"); StructDef obj = new StructDef(null); UnityEngine.Profiling.Profiler.EndSample(); } // 使用匿名函数,访问临时变量,112B gc { int tmp = 1; UnityEngine.Profiling.Profiler.BeginSample("*** Test2 ***"); StructDef obj = new StructDef(() => { var v = tmp; }); UnityEngine.Profiling.Profiler.EndSample(); } // 使用匿名函数,访问外部变量,112B gc { UnityEngine.Profiling.Profiler.BeginSample("*** Test3 ***"); StructDef obj = new StructDef(() => { Debug.LogError(memberValue); }); UnityEngine.Profiling.Profiler.EndSample(); } // 不使用匿名函数,0 gc { UnityEngine.Profiling.Profiler.BeginSample("*** Test4 ***"); StructDef obj = new StructDef(actCallback); UnityEngine.Profiling.Profiler.EndSample(); } } #region optimize for test4 private System.Action actCallback; public TestStructGC() { actCallback = LocalCallback; } private void LocalCallback() { Debug.LogError(memberValue); } #endregion }
参考:https://blog.uwa4d.com/archives/Anonymous_heapmemory.html
以上是关于匿名函数访问外部变量有gc的主要内容,如果未能解决你的问题,请参考以下文章