Programming/.NET

문자열을 다루고자 할때 흔히 사용하느 타입이 string입니다.

string s = "hello world!";
Console.WriteLine(s);

string은 한번 문자열값을 할당한 뒤 변경이 없는 경우에는 쓸만하지만 문자열 추가와 같은 잦은 변경이 발생한다면 StringBuilder를 사용하는 편이 성능상 훨씬 이득입니다.

StringBuilder sb = new StringBuilder("hello world!");
 
sb.Append("abc");
sb.Append("def");
 
Console.Write(sb.ToString());

string은 값이 변경될때마다 변경이후의 크기만큼 메모리를 힙에 할당하고 문자열의 내용전체를 복사해 할당된 힙메모리에 저장한뒤 해당 힙의 주소를 string변수에 전달하는 과정을 반복해야 합니다.

 

하지만 StringBuilder는 미리 어느정도의 메모리를 할당하여 문자열값을 담아두고 값이 변경되면 할당된 메모리내에서 변경되는 값을 복사합니다. 만약 Append등의 메서도호출로 저장해야할 문자열값이 늘어나서 메모리가 더 필요해지만 그때 필요한 만큼의 메모리를 할당합니다. 이러한 차이로 인해 string의 값이 자주변경되는 환경에서는 성능이 느려질 수 밖에 없습니다.

 

따라서 문자열연결이나 변경작업이 자주 발생되는 경우에는 string보다는 StringBuilder사용을 권장합니다.

'Programming > .NET' 카테고리의 다른 글

정규식(Regular)  (0) 2019.06.20
힙과 스택  (0) 2019.06.11
[C#] StringBuilder  (0) 2019.05.28
[C#] Stopwatch  (0) 2019.05.09
가비지 수집기 : GC (Garbage Collector)  (0) 2019.04.30
[C#] null 조건  (0) 2019.04.16
0 0