무효 클릭 IP 추적 중...
c#

[c# 기초] StringBuilder 사용 이유?

꼬예 2022. 5. 9.

이번 포스팅에서는 StringBuilder를 써야 하는 이유사용법에 대해 알아보도록 하겠습니다.

 

 

1. StringBuilder를 써야 하는 이유

 

기본 string형태는 immutable 형태변경할 수 없는 데이터타입 입니다. 

 

이 말은 무엇을 의미할까요?

 

이는 데이터값이 바뀔때마다 새로운 메모리에 해당 값이 저장되고, 낙동강 오리알이 되어버린 이전값들이 garbage로 쌓이게 된다는걸 의미합니다.

 

결과적으로 속도가 느려집니다.

 

반면 StringBuilder변경할 수 있는 데이터타입으로 해당 문제를 해결 해줍니다.

 

2. string vs Stringbuilder 속도 비교 코드

코드 속도 측정 클래스(Stopwatch)를 모르시는 분은 해당 포스팅을 참조바랍니다.

 

 

정말로 그런지 아래 코드를 통해 확인해보겠습니다.

 

1) string 형태

 

빈문자열에 숫자들을 이어붙히는 코드입니다.

using System.Diagnostics; //Stopwatch 사용하기 위함

Stopwatch regularStopwatch = new Stopwatch();

regularStopwatch.Start();

//측정 하고싶은 코드 작성 
string test = "";

for (int i = 0; i < 100000; i++)
{
    test += i;
}
// 측정하고 싶은 코드 작성

regularStopwatch.Stop();

Console.WriteLine($"Regular Stopwatch: {regularStopwatch.ElapsedMilliseconds} ms");

//output: Regular Stopwatch: 10681 ms

 

2) StringBuilder 형태

 

같은 코드를 StringBuilder를 사용해보았습니다.

using System.Diagnostics; //Stopwatch 사용하기 위함
using System.Text; //StringBuilder 사용하기 위함

Stopwatch builderStopwatch = new Stopwatch();

builderStopwatch.Start();

//측정 하고싶은 코드 작성 
StringBuilder sb = new StringBuilder();

for (int i = 0; i < 100000; i++)
{
    sb.Append(i);
}
// 측정하고 싶은 코드 작성

builderStopwatch.Stop();

Console.WriteLine($"String Stopwatch: {builderStopwatch.ElapsedMilliseconds} ms");

//output: String Stopwatch: 2 ms

 

10681 ms -> 2ms 로 속도가 크게 향상 되는 걸 알 수 있습니다.

 

 

위 코드에서는 for loop를 100000까지 반복했는데, 반복수가 작을수록 두 데이터타입의 속도 차이는 줄어들고, 크기가 커질수록 속도 차이가 커집니다

 

대량의 데이터를 다룰때는 StringBuilder 사용을 추천드립니다.

 

 

참조사이트 : 공식문서 사이트​

 

StringBuilder Class (System.Text)

Represents a mutable string of characters. This class cannot be inherited.

docs.microsoft.com

 

  • 트위터 공유하기
  • 페이스북 공유하기
  • 카카오톡 공유하기
이 컨텐츠가 마음에 드셨다면 커피 한잔(후원) ☕

댓글