2009. 2. 27. 11:44

String 과 StringBuilder의 차이점

출처:데브피아~~~~~~~
 

String 개체는 문자열을 빼거나 더할 때 새로운 String 개체를 생성합니다.
그러나 StringBuilder는 한번 생성되면 다시 생성되지 않습니다.
자체적으로 Buffer를 가지고 있기 때문에 문자열을 더하거나 뺄 때 이 Buffer를 이용
하기 때문이죠.
그래서 문자열의 연산이 많을 때는 StringBuilder를 이용하는 게 훨씬 효율적이라고 
온라인 문서와 MSDN의 기사에 나와 있더군요.
저도 그렇게 믿고 10번 정도의 문자열 연산을 하는 것은 StringBuilder를 사용하도록 
했습니다.
그런데 방금 테스트해본 결과 100번 정도의 작업은 String이 훨씬 빠르고 1200번 정
도 후에는 String이 기하급수적으로 느려지는 걸 발견했습니다.
하지만 베타 버전이라 느릴 수 있다는 생각이 드므로 일단은 StringBuilder를 이용해 
계속 함수를 만들 생각입니다.
다음은 테스트하는 데 쓰인 소스입니다. Len 인수의 값을 작게 하면 할수록 String이 
빠르고 많게 하면 할수록 StringBuilder가 빨라집니다.

public static void Main(string[] args)
{
    long Start = 0;
    long Duration = 0;
    string s = "";

    Start = System.DateTime.Now.Ticks;
    s = StringBuilderTest(10000);
    Duration = System.DateTime.Now.Ticks - Start;
    Console.WriteLine("StringBuilder: " + Duration.ToString()); //200290, 300435

    Start = System.DateTime.Now.Ticks;
    s = StringTest(10000);
    Duration = System.DateTime.Now.Ticks - Start;
    Console.WriteLine("string: " + Duration.ToString()); //20629870, 21130590

    Console.ReadLine();
}

public static string StringTest(int Len)
{
    string s = "";

    for (int i = 0; i < Len; i++)
    {
        s += i.ToString();
    }
    
    return s;
}

public static string StringBuilderTest(int Len)
{
    StringBuilder sb = new StringBuilder();

    for (int i = 0; i < Len; i++)
    {
        sb.Append(i.ToString());
    }
    
    return sb.ToString();

    }