프로그래밍/C#

[C#] String 문자열과 StringBuilder 오버헤드 계산

NIA1995 2022. 4. 9. 22:19

String 데이터 타입은 immutable Type인데 코드 상에서는 대입 연산자가 오버 로딩되어 있어 마치 mutable Type처럼 사용이 가능합니다. 하지만 내부적으론 새로운 공간에 새로운 값을 할당하여 오버헤드가 발생을 하게 됩니다.

 

이때 버퍼를 가지고 있는 StringBuilder 클래스를 사용하면 mutable Type으로 사용이 가능합니다. 따라서 String과 StringBuilder의 대입 연산을 반복적으로 돌려서 서로의 오버헤드를 알아보고자 합니다. 

 

using System.Text;
using System.Diagnostics;

private void OverheadTest()
{
	string test1 = "";

    Stopwatch time1 = new Stopwatch();
    time1.Start();

   	for (int i = 0; i < 100000; i++)
   	{
   	    test1 += i.ToString();
   	}

   	time1.Stop();

   	UnityEngine.Debug.Log("TEST 1 Time : " + time1.ElapsedMilliseconds);

   	StringBuilder test2 = new StringBuilder();

   	Stopwatch time2 = new Stopwatch();
   	time2.Start();

   	for (int i = 0; i < 100000; i++)
   	{
   	    test2.Append(i.ToString());
   	}

   	time2.Stop();

   	UnityEngine.Debug.Log("TEST 2 Time : " + time2.ElapsedMilliseconds);
}

실행 결과 --------
TEST 1 Time : 59987
TEST 2 Time : 74

 

각 각 10만번의 반복문을 돌린 결과 생각보다 큰 차이가 있었습니다. 따라서 문자열의 할당과 관련된 작업을 지속적이고 대량으로 할 경우 StringBuilder를 사용하면 될 것 같습니다.