Language/C#

[C#] 문자열 다루기 - StringBuilder

마탁이 2020. 12. 23. 21:03

1. StringBuilder

 - string은 값이 계속해서 변하는 빈도가 많을 경우 성능에 좋지 않은 영향을 미칠 수 있다.

 - StringBuilder 는 값 복사 없이 버퍼의 크기만큼 동적으로 값 변경을 처리할 수 있다.

 - StringBuilder 는 System 네임스페이스가 아닌 System.Text 네임스페이스에 존재하며 미리 using으로 선언해야 한다.

 - StringBuilder 를 사용할 경우 다음의 사항을 고려한다.

  1) 문자열의 변경 처리가 많이 일어나지 않을 경우에는 string과의 성능 차이가 미미하다.

  2) 적은 변경을 StringBuilder 로 선언할 경우 코드의 가독성이 좋지 않다.

  3) 문자열의 변화가 클 경우 StringBuilder 의 생성자에 사이즈를 미리 정해야 한다.

    > 기본 생성자에서 정한 크기를 벗어날 경우 StringBuilder 의 사이즈를 확대하면서

     값 복사 등의 연산이 일어나는데, 이러한 작업은 비용이 많이 발생하는 작업이다.

       e.g) StringBuilder text = new StringBuilder(10000);

 

using System;
using System.Text; // StringBuilder
using System.Diagnostics; // StopWatch

namespace SqlerCSharp
{
    class Program
    {
        static void Main(string[] args)
        {
            // string
            string text1 = "";

            Stopwatch sw1 = Stopwatch.StartNew();
            for(int i =0; i < 50000; i++)
            {
                text1 += i.ToString();
            }
            sw1.Stop();

            // StringBuilder
            StringBuilder text2 = new StringBuilder();

            Stopwatch sw2 = Stopwatch.StartNew();
            for(int i = 0; i < 50000; i++)
            {
                text2.Append(i.ToString());
            }
            sw2.Stop();

            Console.WriteLine("String : {0} ms", sw1.ElapsedMilliseconds);
            Console.WriteLine("StringBuilder : {0} ms", sw2.ElapsedMilliseconds);
        }
    }
}

 

<String 과 StringBuilder 의 비교>

'Language > C#' 카테고리의 다른 글

[C#] 프로퍼티(Property) / 인덱서(Indexer)  (0) 2020.12.26
[C#] 클래스  (0) 2020.12.26
[C#] 문자열 다루기 - string, 문자열 포맷  (0) 2020.12.23
[C#] 배열 정렬  (0) 2020.12.23
[C#] 배열 복사  (0) 2020.12.23