C#中委托相当于类(不是值类型,而是引用类型),
当做为形参传入的时候
或者 System.Action b = TestB;//TestB是一个方法,
这样调用一次为产生112bytes的gcalloc
所以我们要避免在update中这样使用。
同理,我们尽量避免使用LINQ语句,因为Linq语句要求我们传入一个委托(delegate)或者方法名,或者lambda表达式。那么GC就产生。
很有可能我们这个LINQ会在排序函数中用到,那么产生的GC就不是一个小数目了。
游戏的卡顿也会跟随着出现。
测试代码:
List<int> list = new List<int>(); for(int i = 0; i < 100;i++) {
list.Add(UnityEngine.Random.Range(0, int.MaxValue)); } int target = 200; int
resultLinq = 0, resultFor = 0;
UnityEngine.Profiling.Profiler.BeginSample("MY_TEST LINQ"); resultLinq =
list.Find(i => i == target); UnityEngine.Profiling.Profiler.EndSample();
UnityEngine.Profiling.Profiler.BeginSample("MY_TEST FOR"); foreach (var i in
list) { if (i == target) { resultFor = i; } }
UnityEngine.Profiling.Profiler.EndSample();
Profiler结果:看到 gcalloc 产生了
今日推荐