哪个变量声明可优化内存性能

本文关键字:优化 内存 性能 声明 变量 | 更新日期: 2023-09-27 18:28:47

哪种方法优化内存还是相同?方法 1GameObject是否为每个循环创建新的内存分配?,因为我相信方法 2 GameObject使用相同的内存引用。

Method 1创建 GC 或创建新的内存分配会降低性能吗?

方法 1

foreach (GameObject child in childs)
{
    GameObject obj = otherObj.GetComponent<Transform>().gameObject;
    //do something with obj
}
foreach(GameObject child in child2)
{
    GameObject obj = otherObj2.GetComponent<Transform>().gameObject;
    //do something with obj
}

方法 2

GameObject obj;
foreach (GameObject child in childs)
{
    obj = otherObj.GetComponent<Transform>().gameObject;
    //do something with obj
}
foreach(GameObject child in child2)
{
    obj = otherObj2.GetComponent<Transform>().gameObject;
    //do something with obj
}

哪个变量声明可优化内存性能

两种方法的GC应力是相同的。罪魁祸首不是obj而是foreach。如果使用 for 进行迭代,则可以在没有任何内存分配的情况下执行此循环:

for(int i = 0; i < transform.childCount; i++){
        GameObject obj = transform.GetChild(i).GetComponent<Transform>().gameObject;
        //do something with obj
    }

循环外声明obj游戏对象将提高性能,因为不再在循环的每次迭代中重新创建变量。

此外,由于Unity 5.5(foreach GC分配问题(已针对常见集合得到解决,因此像List<T>这样的集合不再分配,因此无需使用for

另一个调整是更改以下内容:

obj = otherObj.GetComponent<Transform>().gameObject;

自:

obj = otherObj.gameObject;

gameObjecttransform 都可以用作从 MonoBehaviour 派生的任何类的属性。