关于unity中foreach的使用

    网上有很多讨论关于在unity中使用foreach的方法,比如https://www.zhihu.com/question/30334270/answer/49934065中热烈的讨论,以前也经常在非update的地方使用foreach。下面来试一下就知道了,本测试中使用的是unity5.4.3p2和unity4.6.3f1两个版本。

    1.在unity5.4.3p2(64位)中测试,代码如下:

using UnityEngine;
using System.Collections;
using System.Collections.Generic;
public class ForeachTest : MonoBehaviour {

    private List<int> list = new List<int>();
	void Start () 
    {
	    for(int num = 0 ; num < 50 ; num++)
        {
            list.Add(num);
        }
	}
	void Update () 
    {
        ForeachFun();
        //ForFun();
	}

    void ForeachFun()
    {
       foreach(int num in list)
       {

       }
    }
    void ForFun()
    {
        for (int num = 0; num < list.Count; num++)
        {

        }
    }
}
测试结果如下图:

update中执行foreach

update中执行for

2.在unity4.6.3f1(32位)中使用一样的代码进行测试,结果如下:

update中执行foreach

update中执行for

3.也试着把Unity编出来的Assembly-CSharp.dll(Unity工程目录下Library\ScriptAssemblies中)拉到ildasm
工具中看一下,如图:

http://write.blog.csdn.net/postedit?ref=toolbarhttp://write.blog.csdn.net/postedit?ref=toolbar

果然是产生了装箱操作。

3.总结

    从上面的profiler截图可以看出,在update中使用foreah的时候,32位和64位的产生的GC量不一样(本应该再用unity5.4.3.p2的32位测试一下会更严谨一些,但是懒得再装一个64位的了闭嘴),上面的帖子中的网友给我们提供了几种解决方式;

最后看一下网友的讨论:https://www.zhihu.com/question/30334270/answer/49858731


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值