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);
}
}
}
'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 |