2008-11-12 3 views

답변

47

컴파일 중입니다. 그건 정확히 "string1string2string3"과 같습니다.

당신이 가진 가정 :

string x = "string1string2string3" 
string y = "string1" + "string2" + "string3" 

컴파일러는 x와 y가 같은 객체를 참조하도록 인턴 적절한 수행합니다.

편집 : 답변 및 의견에 StringBuilder에 대한 이야기가 많이 있습니다. 많은 개발자들은 문자열 연결이 일 때 항상StringBuilder으로 이루어져야한다고 생각합니다. 이것은 지나치게 일반적인 것입니다. 이해할 가치가 있습니다. why StringBuilder is good in some situations, and not in others.

3

연결은 컴파일 타임에 수행되므로 런타임 오버 헤드가 없습니다.

0

StringBuilder을 사용할 수 없습니까?

+0

이렇게하면 코드가 읽기 쉽지 않고 성능이 떨어집니다. 다시 말해, 나쁜 일이 될 것입니다. –

+0

충분하다면, 나는 당신이 많은 연결을한다면 stringbuilder가 추천 될 것이라고 생각했다. – Damien

+0

런타임 중에 많은 연결을 수행하는 경우 그렇습니다. StringBuilder를 사용하는 것이 좋습니다. 그러나 위의 예제는 정적 문자열을 가지고 있으므로 컴파일러는 이미 그것을 단일 문자열로 최적화합니다. – Maxam

7

예제는 컴파일 할 때 연결됩니다. 모든 인라인 문자열과 const 문자열 변수는 컴파일 타임에 연결됩니다.

읽기 전용 문자열을 포함하면 런타임과의 연결이 지연됩니다. string.Empty 및 Environment.NewLine은 모두 읽기 전용 문자열 변수입니다.

1

정말 필요한 항목에 따라 다릅니다. 일반적으로 문자열을 연결해야하는 경우 StringBuilder를 사용하면 런타임에서 최상의 성능을 얻을 수 있습니다. 소스 코드에서 var str = "String1"+ "String2"와 같은 경우 컴파일시 str = "String1String2"문자열로 변환됩니다. 이 경우 연결된 오버 헤드가 없습니다.

+0

일반화가 너무 일반적입니다. 한 번에 전체 연결을 수행 할 수 있으면 StringBuilder를 사용하는 것보다 일반적으로 더 빠르고 (읽기 쉽습니다). 따라서 "x + y + z"를 새 StringBuilder (x) .Append (y) .Append (z) .ToString()으로 선호하십시오. StringBuilder는 * 반복 * 연결이있을 때 유용합니다. –

+0

두 번째 Jon의 포인트로 ... StringBuilder는 루핑 할 때 유용합니다. 단일 작업 세트의 경우 string.Concat은 더 간단하고 동일하게 작동합니다. –

+0

고마워 마크 - 공간이 부족합니다 :) 내 StringBuilder 기사를 가리 키도록 내 대답 편집 ... –

37

공백이 중요하지 않으면 @ 이스케이프 문자를 사용하여 코드에 여러 줄 문자열을 쓸 수 있습니다. 이렇게하면 예를 들어 코드에서 쿼리가있는 경우 유용합니다

string query = @"SELECT whatever 
FROM tableName 
WHERE column = 1"; 

이 당신에게 줄 바꿈과 탭이있는 문자열을 줄 것이다,하지만 쿼리에 대한 문제가되지 않습니다.

1

많은 (약 4 개 이상) 문자열을 연결할 경우 StringBuilder를 사용하는 것이 좋습니다. 더 빠릅니다.

위의 예에서 String.Concat을 사용하는 것은 컴파일 할 때 수행됩니다. 그들은 리터럴 문자열이므로 컴파일러에서 최적화됩니다.

당신이 그러나 사용하는 경우 변수는 :

string a = "string1"; 
string b = "string2"; 
string c = a + b; 

이 런타임에 이루어집니다.

+0

"4 이상"은 데이터 집합을 반복 할 때만 관련이 있습니다. 그렇지 않으면 필요에 따라 배열을 전달하는 string.Concat에 대한 단일 호출이 동일합니다. –

+0

당신이 말하는 것은 사실입니다. http://dotnetperls.com/Content/StringBuilder-Performance.aspx –

-3

문자열을 사용하는 경우 StringBuilder가 가장 빠른 방법입니다.당신은 몇 가지 문자열을 수행하는 경우

http://dotnetperls.com/Content/StringBuilder-1.aspx

속도가 사용중인 연결의 어떤 종류의 문제가되지 않습니다 (5 이하의 좋은 규칙이있다).

+0

String builder는보다 빠른 * runtime * 솔루션이지만 주어진 표현식은 컴파일 타임에 더 잘 평가 될 것입니다. 컴파일러) – peterchen

0

할 방법이 있습니다. 내 favorete는 C#의 문자열 메서드를 사용합니다. 샘플 1 :

문자열 s = string.Format ("{0} {1} {0}", "Hello", "By"); 결과는 s = "Hello By Hello"입니다.

관련 문제