哪个变量声明可优化内存性能
本文关键字:优化 内存 性能 声明 变量 | 更新日期: 2023-09-27 18:28:47
哪种方法优化内存还是相同?方法 1 的GameObject
是否为每个循环创建新的内存分配?,因为我相信方法 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;
gameObject
和 transform
都可以用作从 MonoBehaviour
派生的任何类的属性。