title: 作为Unity3D的脚本而言，c#中for是否真的比foreach效率更高？
desc: 网上会流传一些说法是说在c中for比foreach指令更加精简，效率更高，而且foreach会在每次循环的时候产生几kb的gc。所以在开发中（Unity）尽量使用for来替代foreach。<br>
topic: Unity（游戏引擎）
content: 在普通CLR里，针对List<T>和Array的for比foreach快，而JIT在确定这个对象是List或Array的时候，会为foreach生成优化的代码，注意这里不仅仅是优化成for，而是把List直接优化成对其内部数组的访问，且不会有多余的边界检查，因此可以说List<T>是一个特殊的存在。这方面x86的JIT是这样的，x64的话，经tracing似乎还是foreach。x64运行时目前做的比较草率，似乎4.6开始（RyuJIT？）就精细很多了，因为之前不是特地写的JIT，而是用C
answerer_tags: 问答社区“温赵轮”三大软狗之一。