Chapter 3. 코드 최적화

개발하는 운동인·2025년 8월 27일

1

//1.  미세하지만 gc가 일어난다.
bool isPlayer = other.gameObject.tag == playerTag

//2. 미세하지만 gc가 안 일어난다.
bool isPlayer = other.gameObject.CompareTag(playerTag)

2

  // PerformanceTest.cs
    void Update()
    {
        float startTime = Time.realtimeSinceStartup;
        ;
        String1();

        float t1 = (Time.realtimeSinceStartup - startTime) * 1000f;
        startTime = Time.realtimeSinceStartup;

        String2();

        float t2 = (Time.realtimeSinceStartup - startTime) * 1000f;

        Debug.Log(t1 + " " + t2 \);
    }

    void String1()
    {
        for (int i = 0; i < 1000; i++)
        {
            string str = "";
            for (int j = 0; j < 1000; j++)
            {
                str += "This is string";
            }
        }
    }
    void String2()
    {
        for (int i = 0; i < 1000; i++)
        {
            StringBuilder builder = new StringBuilder();
            for (int j = 0; j < 1000; j++)
            {
                builder.Append("This is string");
            }
            string str = builder.ToString();
        }
    }
  • 결과 : 자주 바뀌는 문자열은 StringBuilder가 더 빠르다.

3

// PerformanceTest.cs
void Update()
{
    float startTime = Time.realtimeSinceStartup;
    ;
    VectorMultiply1();

    float t1 = (Time.realtimeSinceStartup - startTime) * 1000f;
    startTime = Time.realtimeSinceStartup;

    VectorMultiply2();

    float t2 = (Time.realtimeSinceStartup - startTime) * 1000f;
    startTime = Time.realtimeSinceStartup;

    VectorMultiply3();
    float t3 = (Time.realtimeSinceStartup - startTime) * 1000f;

    Debug.Log(t1 + " " + t2 + " " + t3);
}

Vector3 vector = new Vector3(123, 456, 789);
float multiplier = 7894.3f;
void VectorMultiply1()
{
    for (int i = 0; i < 1000000; i++)
    {
        var result = multiplier * multiplier * vector;
    }
}

void VectorMultiply2()
{
    for (int i = 0; i < 1000000; i++)
    {
        var result = multiplier * vector*  multiplier;
    }
}

void VectorMultiply3()
{
    for (int i = 0; i < 1000000; i++)
    {
        var result = vector* multiplier * multiplier;
    }
}


0개의 댓글