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 값이다.
'프로그래밍 > .Net' 카테고리의 다른 글
ui control 사용 (0) | 2014.01.17 |
---|---|
구조체 내부에 배열 초기화 (0) | 2014.01.17 |
Registry 사용하기 (0) | 2014.01.17 |
Object 주소는 다르지만 동일한 값으로 복사 유지 하는 방법 : 복사생성자 (0) | 2014.01.17 |
string 문자열 파싱해보자 (0) | 2014.01.17 |