이번 포스팅에서는 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 사용을 추천드립니다.
참조사이트 : 공식문서 사이트
'c#' 카테고리의 다른 글
[c#] 델리게이트(delegate) 개념 | += , -= (2) | 2022.05.10 |
---|---|
[c# 기초] 코드 동작 시간 측정 (with Stopwatch) (0) | 2022.05.09 |
[c# 기초] partial을 쓰는 이유? (0) | 2022.05.06 |
[c# 기초] c# 접근 제한자(Access modifier) / private, protected, public (0) | 2022.05.06 |
[c# 기초] this 키워드 , this() 생성자 개념 (0) | 2022.05.04 |
댓글