2016-11-28 2 views
0
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가 다른 이유를 알고 싶습니다. 누군가 나에게 이유를 말할 수 있습니다.왜 GameObject 캐시가 더 빠릅니까?

+1

나쁜 벤치 마크입니다. 신뢰할 수 없습니다. 어쨌든, 부작용이있을 수 있습니다. –

+0

참고로, 게임에서의 개발을 위해'OnGUI'를 사용해서는 안됩니다. 이 함수는 편집기 용 컨트롤을 디자인 할 때만 사용해야합니다. –

답변

3

this.gameObject 그래서 그것은 방법들 및 방법들의 사용에 약간의 오버 헤드를 추가 속성

public GameObject gameObject { get;} 

이다. 먼저 프로그램은 현재 인덱스를 저장하고 메서드 위치로 점프하고 스택에 매개 변수를 쌓고 메서드에서 코드를 실행해야합니다. 그런 다음 중단 한 곳으로 돌아가는 반전 효과를냅니다.

맨 위에 속성에서 추가 체크가있을 수 있습니다.

캐시 버전을 사용한다는 것은 사용자가 직접 액세스 한 참조를 사용하고 있음을 의미합니다.

+0

감사합니다. Everts^- ^ –