2013-05-08 2 views
0

이 두 문자열 연결 패턴은 동일한 양의 메모리를 사용합니까?C#의 문자열 연결 메모리 사용

//Method 1 
String testString = "Test " + " string " + " content"; 

//Method 2 
String testString = "Test "; 
testString = testString + " string "; 
testString = testString + " content"; 

이 두 가지 방법을 모두 피해야하고 StringBuilder 클래스를 사용해야합니까?

+7

첫 번째 문자열은 단일 문자열로 컴파일되므로 * 실제로 두 번째 예제 만 실제로 런타임 연결이됩니다. – dlev

+2

정말 중요한가요? ;) http://www.codinghorror.com/blog/2009/01/the-sad-tragedy-of-micro-optimization-theater.html – dana

+0

에 따라 .Format() 또는 StringBuilder를 선택할 수 있습니다. 문맥. dana의 링크는 아주 좋은 예입니다. 그리고 언급했듯이 문자열에'+'연산자를 사용하지 않는 것을 보게 될 것입니다. – Jack

답변

2

방법 2 메모리를 더 할당 될 것이고, 캐릭터 오브젝트는 다음과 같은 조합을 저장하기 위해 생성된다 방법 1의 경우는 단지 하나의 문자열을 작성한다

1) "Test " 
2) " String" 
3) "Test string" 
4) " Content" 
5) "Test String Content" 

1) "Test string Content" 

방법 1은이 두 가지 방법 중에서 선호되어야합니다.

StringBuilder 문자열을 생성해야 할 때 클래스가 더 효율적입니다. 모자는 많은 문자열 값을 결합하는 것을 포함합니다.

2

예, StringBuilder가 더 좋습니다. 다른 모든 경우에는 C#에서 문자열을 변경할 수 없으므로 여러 개의 새 문자열을 작성한다고 설명합니다. 이렇게하면 C#이 새 문자열을 만들어 문자열 변경을 시뮬레이션합니다.

방법 1은 단일 문자열로 변환 될 수 있습니다. 고정 부분 문자열을 연결하여 문자열을 만들 필요가 없습니다.

0

제 의견으로는이 두 가지 방법의 큰 차이입니다. 메소드 1에서 메소드 1에서 문자열 testString = "문자열 내용 테스트" 하지만 메소드 2에서 문자열 testString = "Test", 실행시 , 메소드 1에서 문자열 testString이 불변의 주소이지만 방법 2에서 clr은 힙에 새 메모리를 할당하고 문자열을 함께 결합합니다. 그리고 StringBuilder는 문자열을 자주 결합하는 좋은 방법이라고 생각합니다.