StringBuilder


string타입은 불변 객체이기 때문에 string에 대한 모든 변환은 새로운 메모리 할당을 발생시킨다.

불변 타입의 string클래스가 발생시키는 가장 큰 문제는 문자열을 더할 때다.

끊임없이 힙에 메모리를 할당하고 이전의 문자열을 다시 복사하는 과정을 거쳐 시간이 오래 걸린다.

string


string txt = "Hello";

for(int i=0; i<300000; i++)
{
	// 새로운 메모리에 Hello1~~~111을 작성
	txt = txt + "1";
}

StringBuilder


string txt = "Hello";

StringBuilder sb = new StringBuilder();
sb.Append(txt);

for(int i=0; i<300000; i++)
{
	// Append 메서드에 들어온 인자를 미리 할당한 메모리에 복사한다.
	sb.Append("1");
}

// ToString(); 으로 string 변환을 해줘야함.
string newText = sb.ToString();

잦은 메모리 할당과 복사가 없어졌기 때문에 그만큼 성능이 향상된다.

문자열을 연결하는 작업이 많을 때는 반드시 StringBuilder를 사용하는것을 권장한다.

[C#] string + string 과 StringBuilder.Append() 차이

.NET에서 StringBuilder 클래스 사용