String과 StringBuilder는 문자열을 다루는 객체들이다.

But.

String과 StringBuilder는 문자열을 다루는데 있어 차이점이 있다.

String은 문자열을 처리하는 과정(추가, 삭제, 변환등등)에서

새로은 객체를 생성해야만 한다.

즉, string test = "aaa";

string test2 = test.Replace("");

때문에 많은 양의 오퍼레이션 동작을 진행하게되면

속도 저하와 메모리 누적이 발생된다.

 

StringBuilder는 정해진 객체의 크기를 정해놓고 사용가능하다.

즉 StringBuilder test = new StringBuilder(12);

이러면 자동으로 12*2 만큼의 메모리 공간을 할당해놓는다.

문자열 처리는 메소드로 제공해주는 함수를 사용한다

하기는 속도비교인데, 확실히 StringBuilder 가 빠르다.

 

class MainApp
{
static void Main(string[] args)
{
DateTime startTime;
TimeSpan elapsed;

String str1 = "";
startTime = DateTime.Now;
for (int i = 0; i < 50000; i++)
{
str1 += "H"; //새로운 문자열 생성하기
}
elapsed = DateTime.Now - startTime;
Console.WriteLine("String : {0}", elapsed.Milliseconds);

StringBuilder sb = new StringBuilder();
startTime = DateTime.Now;
for (int i = 0; i < 50000; i++)
{
sb.Append("H"); //새로운 문자열 추가하기
}
elapsed = DateTime.Now - startTime;
Console.WriteLine("StringBuilder : {0}", elapsed.Milliseconds);
}
}

 

////// string 변경시 다른곳에 객체 생성

///// StringBuilder 변경시 동일한 곳에서 변경

// 관련 테스트는 하기와 같다.

string sztemp = "test";
int a =sztemp.GetHashCode();
sztemp += "test2";
int b = sztemp.GetHashCode();

StringBuilder szBld = new StringBuilder(256);
int c = szBld.GetHashCode();
szBld.Append("test2");
int d = szBld.GetHashCode();

 

이렇게 선언된 경우,

a, b는 다른곳을, c,d는 같은 곳을 가르킨다.

즉, string은 다시 생성, StringBuilder는 같은장소에서 변경..

 

하기는 디버깅시 hashcode 값이다.

 

 

+ Recent posts