首先看片文章
https://www.zhihu.com/question/30334270
里面有张图
【小松教你手游开发】【面试必读(编程基础)】foreach为什么在unity不建议用_第1张图片

这里解释了在每个foreach循环之后会有一个boxing的过程,什么是boxing?(详细看这里:http://www.cnblogs.com/xiaoshi/archive/2008/05/28/1208902.html)

简单来说就是把值类型转换成引用类型。
【小松教你手游开发】【面试必读(编程基础)】foreach为什么在unity不建议用

这里的第二行就是boxing过程
第三行就是unboxing过程

也就是说每次使用foreach会在结束的时候在堆上申请一段引用内存(40Bytes,对list的引用)

而引用内存多了后会在GCCollect时候回收。
回收的过程会卡。

所以unity不要用foreach的原因是,会产生垃圾内存,导致卡顿