private GameObject mGo;
void Start()
{
this.mGo = this.gameObject;
}
void OnGUI()
{
if (GUILayout.Button("T1"))
{
float time = Time.realtimeSinceStartup;
int s = 0;
for (int i = 0; i < 100000; i++)
{
s = this.gameObject.layer;
}
Debug.Log("T1:" + (Time.realtimeSinceStartup - time));
}
if (GUILayout.Button("T2"))
{
float time = Time.realtimeSinceStartup;
int s = 0;
for (int i = 0; i < 100000; i++)
{
s = this.mGo.layer;
}
Debug.Log("T2:" + (Time.realtimeSinceStartup - time));
}
}
这是一个简单的演示。 我正在阅读其他源代码,然后找到这个。 我想知道为什么T1和T2不同? 有人可以告诉我原因。
答案 0 :(得分:3)
this.gameObject是一个属性
public GameObject gameObject { get;}
所以这是一种方法和方法在它们的使用中增加了一些开销。 首先,程序需要存储当前索引,然后跳转到方法位置,将参数堆叠在堆栈上并运行方法中的代码。然后它执行返回到它停止的程序的反转效果。
除此之外,酒店可能还有一些额外的支票。
使用缓存版本意味着您正在使用直接访问的引用。