Unity 关于foreach产生GC的bug修复

以前面试的时候了解到Unity中要少用foreach,因为会产生GC Alloc,也就是会产生垃圾内存,后面看知乎了解到产生这个GC的原因主要在IL层里面有一个box装箱的过程以及IEnumrator中newObject的过程,具体可以看这篇文章,但是后来有人说这个bug已经被修复了,但网上没有明确的文章指出来(或者是我没有找到),所以我自己按章上面提到的文章采用的方法自己测试了一遍。

测试结果: 结果发现foreach现在并不会产生GC Alloc,无论泛型类型是值类型还是引用类型。

证据支持:测试代码与推荐文章所用的代码一样,只测试list使用foreach的情况
首先是我在profier里面跑出的结果:
在这里插入图片描述
可以看到,GC Alloc为0,这是最直接的证据,之后再查看一下IL层代码:
在这里插入图片描述
虽然依然有callvirt,但是并没有之前文章提到的box过程以及newobj过程,继续查看两个调用函数的地方,发现在GetEnmurator的时候有newObj操作,但是不知道为什么这个并没有反映到Profier里面,这也是我不理解的地方在这里插入图片描述
foreach下面还有一个MoveNext操作,以前好像就是因为这里面有newobj操作,所以导致的GC,但是现在看来并没有,所以我判断现在使用foreach并不会导致GC
在这里插入图片描述
结论:foreach产生GC的bug应该已经被修复了,但这只是我个人的判断,希望有清楚的大佬明确指出来,毕竟foreach带来的编码效率挺高的,不能用就很可惜。