C# 소스 코드에서 긴 문자열을 끊는 "모범 사례"가 궁금합니다. 이 문자열입니까C# 소스 코드에서 긴 문자열을 끊는 가장 좋은 방법
"string1"+
"string2"+
"string3"
컴파일 중 또는 런타임에 연결 되나요?
C# 소스 코드에서 긴 문자열을 끊는 "모범 사례"가 궁금합니다. 이 문자열입니까C# 소스 코드에서 긴 문자열을 끊는 가장 좋은 방법
"string1"+
"string2"+
"string3"
컴파일 중 또는 런타임에 연결 되나요?
컴파일 중입니다. 그건 정확히 "string1string2string3"과 같습니다.
당신이 가진 가정 :string x = "string1string2string3"
string y = "string1" + "string2" + "string3"
컴파일러는 x와 y가 같은 객체를 참조하도록 인턴 적절한 수행합니다.
편집 : 답변 및 의견에 StringBuilder
에 대한 이야기가 많이 있습니다. 많은 개발자들은 문자열 연결이 일 때 항상이 StringBuilder
으로 이루어져야한다고 생각합니다. 이것은 지나치게 일반적인 것입니다. 이해할 가치가 있습니다. why StringBuilder
is good in some situations, and not in others.
연결은 컴파일 타임에 수행되므로 런타임 오버 헤드가 없습니다.
StringBuilder
을 사용할 수 없습니까?
예제는 컴파일 할 때 연결됩니다. 모든 인라인 문자열과 const 문자열 변수는 컴파일 타임에 연결됩니다.
읽기 전용 문자열을 포함하면 런타임과의 연결이 지연됩니다. string.Empty 및 Environment.NewLine은 모두 읽기 전용 문자열 변수입니다.
정말 필요한 항목에 따라 다릅니다. 일반적으로 문자열을 연결해야하는 경우 StringBuilder를 사용하면 런타임에서 최상의 성능을 얻을 수 있습니다. 소스 코드에서 var str = "String1"+ "String2"와 같은 경우 컴파일시 str = "String1String2"문자열로 변환됩니다. 이 경우 연결된 오버 헤드가 없습니다.
일반화가 너무 일반적입니다. 한 번에 전체 연결을 수행 할 수 있으면 StringBuilder를 사용하는 것보다 일반적으로 더 빠르고 (읽기 쉽습니다). 따라서 "x + y + z"를 새 StringBuilder (x) .Append (y) .Append (z) .ToString()으로 선호하십시오. StringBuilder는 * 반복 * 연결이있을 때 유용합니다. –
두 번째 Jon의 포인트로 ... StringBuilder는 루핑 할 때 유용합니다. 단일 작업 세트의 경우 string.Concat은 더 간단하고 동일하게 작동합니다. –
고마워 마크 - 공간이 부족합니다 :) 내 StringBuilder 기사를 가리 키도록 내 대답 편집 ... –
공백이 중요하지 않으면 @ 이스케이프 문자를 사용하여 코드에 여러 줄 문자열을 쓸 수 있습니다. 이렇게하면 예를 들어 코드에서 쿼리가있는 경우 유용합니다
string query = @"SELECT whatever
FROM tableName
WHERE column = 1";
이 당신에게 줄 바꿈과 탭이있는 문자열을 줄 것이다,하지만 쿼리에 대한 문제가되지 않습니다.
많은 (약 4 개 이상) 문자열을 연결할 경우 StringBuilder를 사용하는 것이 좋습니다. 더 빠릅니다.
위의 예에서 String.Concat을 사용하는 것은 컴파일 할 때 수행됩니다. 그들은 리터럴 문자열이므로 컴파일러에서 최적화됩니다.
당신이 그러나 사용하는 경우 변수는 :
string a = "string1";
string b = "string2";
string c = a + b;
이 런타임에 이루어집니다.
"4 이상"은 데이터 집합을 반복 할 때만 관련이 있습니다. 그렇지 않으면 필요에 따라 배열을 전달하는 string.Concat에 대한 단일 호출이 동일합니다. –
당신이 말하는 것은 사실입니다. http://dotnetperls.com/Content/StringBuilder-Performance.aspx –
문자열을 사용하는 경우 StringBuilder가 가장 빠른 방법입니다.당신은 몇 가지 문자열을 수행하는 경우
http://dotnetperls.com/Content/StringBuilder-1.aspx
속도가 사용중인 연결의 어떤 종류의 문제가되지 않습니다 (5 이하의 좋은 규칙이있다).
String builder는보다 빠른 * runtime * 솔루션이지만 주어진 표현식은 컴파일 타임에 더 잘 평가 될 것입니다. 컴파일러) – peterchen
할 방법이 있습니다. 내 favorete는 C#의 문자열 메서드를 사용합니다. 샘플 1 :
문자열 s = string.Format ("{0} {1} {0}", "Hello", "By"); 결과는 s = "Hello By Hello"입니다.
이렇게하면 코드가 읽기 쉽지 않고 성능이 떨어집니다. 다시 말해, 나쁜 일이 될 것입니다. –
충분하다면, 나는 당신이 많은 연결을한다면 stringbuilder가 추천 될 것이라고 생각했다. – Damien
런타임 중에 많은 연결을 수행하는 경우 그렇습니다. StringBuilder를 사용하는 것이 좋습니다. 그러나 위의 예제는 정적 문자열을 가지고 있으므로 컴파일러는 이미 그것을 단일 문자열로 최적화합니다. – Maxam