인터넷에서 정보를 알아보던중 흥미로운 글을 발견했습니다.
원문 : https://overworks.github.io/unity/2019/07/16/null-of-unity-object.html
유니티 오브젝트의 fake null과, ==과 != 연산자가 오버로딩되어 있으며 그 때문에 null 비교할 때 일반적인 닷넷 오브젝트보다 많은 비용이 들어간다는 것, 그리고 그것을 피하기 위해서는 object.ReferenceEquals()를 사용하면 된다는 것
유니티에서 object == null 체크는 느리다,
위 현상은 MonoBehaviour를 상속받은 클래스를 같음 연산자 ( == 혹은 != ) 발생합니다.
아래 사진은 URL에있던 내용을 바탕으로 테스트한 결과입니다.
단 주의할점은 object.ReferenceEquals 비교시 유니티 오브젝트로 비교하는것이 아니기때문에 Destroy시켜도 GC가 돌기전까진 null판단을 하지 못한다고 합니다.
따라서 정적오브젝트 중 자주 비교되어 사용되는 경우인 싱글톤 클래스에서 사용하는걸 추천합니다.
Case 01 : 캐싱 하지 않고 Transfrom 호출
Case 02 : 캐싱 후 if(Object == null) 체크
Case 03 : 캐싱 후 object.ReferenceEquals(Object,null) 체크
=========================================================
Case 04 : 일반 C#클래스 싱글톤 패턴 호출 if(Object==null) 체크
Case 05 : 일반 C#클래스 싱글톤 패턴 호출 object.ReferenceEquals(Object,null) 체크
Case 06 : MonoBehaviour를 상속받은 싱글톤 패턴 if(Object==null) 체크
Case 07 : MonoBehaviour를 상속받은 싱글톤 패턴 object.ReferenceEquals(Object,null) 체크
'프로그래밍 > Unity3D' 카테고리의 다른 글
유니티 WWW 클래스 header, body 관리법 (1) | 2019.03.28 |
---|---|
Unity TextMeshPro Sprite Importer 사용법 (2) | 2019.03.27 |
[Unity3D] 애플 게임 센터 (Apple Game Centor) Unity에 연동하기! (0) | 2017.11.01 |
[Unity3D] 구글 플레이 게임 서비스(Google PlayGameServices) Unity에 연동하기! (0) | 2017.10.30 |
[Unity3D] 유니티 Release 모드로 APK 빌드하기 (0) | 2017.10.25 |