Zenject 실행 속도 확인

6971 단어 ZenjectUnity

개요


최근 젠ject를 사용했는데 자꾸 인ject가 무겁다고 느껴져 동작 속도를 구체적으로 조사해봤다.

조사 방법


Prefab의 팩토리크리에이트의 동작 속도를 조사하고 싶습니다.
  • 프레임당 Factory.Create &Destroy를 진행하여 도표를 보십시오
  • 게임Object 1개, Component
  • 1개
  • GameObject 201개, Component
  • 1개
  • GameObject 201개, Component 201개
  • 게임Object 1개의 경우 201개의 Component
  • 추가된 Component에 사용할 Inject 속성이 없음
  • 코드

    using Zenject;
    
    public class TestInstaller : MonoInstaller
    {
        public override void InstallBindings()
        {
            Container.BindFactory<TestMonoBehaviour, TestMonoBehaviour.Factory>().FromComponentInNewPrefabResource("TestPrefab 3");
        }
    }
    
    using UnityEngine;
    using Zenject;
    
    public class TestMonoBehaviour : MonoBehaviour
    {
        public class Factory : Factory<TestMonoBehaviour>
        {
        }
    }
    
    using UnityEngine;
    using Zenject;
    
    public class TestMain : MonoBehaviour
    {
        [Inject]
        private TestMonoBehaviour.Factory _factory;
    
        void Update ()
        {
            var obj = _factory.Create();
            Destroy(obj.gameObject);
        }
    }
    
    using UnityEngine;
    
    public class TestMonoBehaviour2 : MonoBehaviour
    {
    }
    
    using UnityEditor;
    
    public class AutoMonoBehaviourSetter : Editor {
        [MenuItem("Tools/Set MonoBehaviours")]
        public static void SetMonoBehaviours()
        {
            for (var i = 0; i < 200; i++)
            {
                Selection.gameObjects[0].AddComponent<TestMonoBehaviour2>();
            }
        }
    }
    

    201개의 GameObject Prefab 삽입



    201개의 Component Prefab 삽입



    결실


    GameObject 1개, Component 1개

  • 0.26ms
  • 4.4KB Alloc

  • GameObject 201개, Component 1개

  • 1.08ms
  • 4.4KB Alloc

  • GameObject 201개, Component 201개

  • 14.60ms
  • 0.5MB Alloc

  • GameObject 1개의 경우 201개의 Component

  • 11.62ms
  • 484.8KB Alloc

  • 총결산


    GameObject
    Component
    Time ms
    GC Allock
    1
    1
    0.26ms
    4.4KB
    201
    1
    1.08ms
    4.4KB
    1
    201
    11.62ms
    484.8KB
    201
    201
    14.08ms
    0.5MB
  • Inject 속성을 사용하든 안 사용하든 상관없이 Component가 많을수록 Inject가 무겁다
  • 게임Object의 수량은 그다지 큰 관계가 없지만 분산하기보다는 하나의 게임Object로 모으는 것이 더 가볍다
  • 좋은 웹페이지 즐겨찾기