2021. 11. 2. 10:44

인터넷에서 정보를 알아보던중 흥미로운 글을 발견했습니다.

원문 : https://overworks.github.io/unity/2019/07/16/null-of-unity-object.html

 

유니티 오브젝트의 null 비교 시 유의사항

다음글: 유니티 오브젝트의 null 비교 시 유의사항 2

overworks.github.io

 

유니티 오브젝트의 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) 체크

Posted by 시리시안