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 产生了

 

技术
©2019-2020 Toolsou All rights reserved,
CSS动画效果ConcurrentHashMap实现原理及源码分析袁隆平团队再创新纪录:耐盐水稻平均亩产1605.8斤致远OA A8 poc中的编码 网站安全有哪些防护措施?ajax 上传表单文件face_recognition的5个应用实例Keras保存与加载模型(JSON+HDF5)json反斜杠问题k8s入门到放弃--k8s重要概念