2014. 5. 16. 14:56ㆍ프로그래밍/Tip Posting
일단
Stringbuilder, StringBuffer 차이는 쓰레드에 대한 동기화 보장성을 버퍼는 해주고 빌더는 못한다는 점.
이라고 하니 성능상 차이는 없는 것으로 간주하고
문자열 연산을 할때 주로 사용하는 것은
스트링의 + 연산자 , concat함수, 스트링빌더의 append 함수....
<스트링과 빌더의 차이>
string 연산은 새로운 문자열을 생성하여 복사하는 형식인데, 문자열 생성에는 new가 호출된다.
이 new가 많이 호출되면 당연히 성능상 느리다. 그런점에서 빈번하게 발생하는 코드나 반복문 내에 사용되는 경우 한번만 new를 호출하는 빌더를 사용하는 것이 유리하다. (이 빈번함의 기준은 500회~1200회 이상일 경우에나 성능차이가 난다고 하는데, 그냥 코딩하면서 생각하기에 빈번하게 발생하는지는 본인이 판단할수 있을듯)
스트링빌더의 장점은 new로 인한 오버헤드 횟수를 줄이자는 취지인데 , 스트링빌더의 메모리배열은(기본 16글자 저장공간으로 생성된다) 가득찬 문자열이 아니라면 그 자체로 오버헤드인건 아이러니...
결론 : 빈번하게 호출되는 함수속 코드나 반복문 안의 코드의 경우를 제외하면 스트링은 충분히 빌더만큼 빠르고 가독성이나 코딩에 장점이 많다. 상황에 맞춰 사용하자.
<스트링의 두방법을 비교해보면>
1) +의 경우 빌더를 호출하여 new할당하고 합친다는 이야기도 있고 (이 경우 +보다 concat이 두배정도 빠른것으로 구글링)
2) C#, VB.NET 컴파일러가 문자열의 + 연산자를 String.Concat 메쏘드 호출로 컴파일 해준다??는 글을 본적이 있는데 맞다면 +연산이나 concat을 동일하게 생각하고 쓸수 있을것같다.
2)의 경우 솔깃한 내용이긴 한데, 컴파일러가 어떻게 해주느냐는 컴파일러마다 다르고 예상할수 없으므로... 상황에 따라 명시적인 코드를 짜야할듯하고, 1)의 경우로 생각해도 상황별 대응은 같은것으로 판단.
* +연산자에 대해 C#에서 문자열 상수+ 문자열 상수 에 대해서는 컴파일러에서 concat 호출을 하지않고 그냥 연결된 문자열상수로 인식한다고 한다.
참조 : http://www.simpleisbest.net/post/2013/04/24/Review-StringBuilder.aspx
'프로그래밍 > Tip Posting' 카테고리의 다른 글
RGB색상표 (0) | 2014.07.02 |
---|---|
카톡스타일의 푸쉬 알림 기능 구현시 주의할 점 (0) | 2014.06.03 |
유니티 페이스북 연동 (0) | 2014.05.13 |
댕글링포인터 (0) | 2014.02.26 |
데이터형 크기와 범위 (0) | 2014.02.26 |