문자열 보간 사용 사이에 눈에 띄는 성능 차이가 있습니까?
myString += $"{x:x2}";
대 String.Format ()?
myString += String.Format("{0:x2}", x);
Resharper가 수정을 요청하고 있기 때문에 요청하고 있으며 이전에 속아 본 적이 있습니다.
답변
주목할만한 것은 상대적입니다. 그러나 문자열 보간은 string.Format()
컴파일 타임에 변환되므로 동일한 결과를 얻게됩니다.
그러나 미묘한 차이가 있습니다. 이 질문 에서 알 수 있듯이 형식 지정자의 문자열 연결로 인해 추가 string.Concat()
호출이 발생합니다.
답변
문자열 보간은 컴파일 타임에 string.Format ()으로 바뀝니다.
또한 string.Format에서 단일 인수에 대해 여러 출력을 지정하고 단일 인수에 대해 다른 출력 형식을 지정할 수 있습니다. 그러나 문자열 보간은 더 읽기 쉽습니다. 그래서 그것은 당신에게 달려 있습니다.
a = string.Format("Due date is {0:M/d/yy} at {0:h:mm}", someComplexObject.someObject.someProperty);
b = $"Due date is {someComplexObject.someObject.someProperty:M/d/yy} at {someComplexObject.someObject.someProperty:h:mm}";
몇 가지 성능 테스트 결과가 있습니다 https://koukia.ca/string-interpolation-vs-string-format-string-concat-and-string-builder-performance-benchmarks-c1dad38032a
답변
문제는 성능에 관한 것이지만 제목에 “vs”라고만 적혀 있으므로 몇 가지 사항을 더 추가해야한다고 생각합니다. 일부는 의견이 있습니다.
-
현지화
- 인라인 코드 특성으로 인해 문자열 보간을 현지화 할 수 없습니다. 현지화하기 전에
string.Format
. 그러나이를위한 도구가 있습니다 (예 🙂ReSharper
.
- 인라인 코드 특성으로 인해 문자열 보간을 현지화 할 수 없습니다. 현지화하기 전에
-
유지 보수 가능성 (내 의견)
string.Format
예를 들어 멋지고 의미있는 오류 메시지를 생성 할 때 내가 표현하고 싶은 문장에 초점을 맞추기 때문에 훨씬 더 읽기 쉽습니다.{N}
자리 표시자를 사용하면 더 많은 유연성을 얻을 수 있으며 나중에 수정하기가 더 쉽습니다.- 또한 인터 플로 레이션의 인라인 형식 지정자는 잘못 읽기 쉽고 변경 중에 식과 함께 삭제하기 쉽습니다.
- 복잡하고 긴 표현식을 사용할 때 보간은 빠르게 읽고 유지하기가 훨씬 더 어려워 지므로 이러한 의미에서 코드가 발전하고 더 복잡해질 때 제대로 확장되지 않습니다.
string.Format
이것에 훨씬 덜 취약합니다. - 하루의 끝에서이 모든 문제의 분리에 관하여 : 나는 혼합하지 좋아해요 가 제시하는 방법 으로 제시해야하는지 .
그래서 이것들을 기반으로 string.Format
대부분의 코드 를 고수하기로 결정했습니다 . 하지만 더 유창하게 코딩 할 수 있도록 확장 방법을 준비했습니다 . 확장 프로그램의 구현은 한 줄로되어 있으며 사용중인 것처럼 보입니다.
var myErrorMessage = "Value must be less than {0:0.00} for field {1}".FormatWith(maximum, fieldName);
보간은 훌륭한 기능입니다. 오해하지 마십시오. 그러나 IMO는 string.Format
JavaScript와 같은 유사한 기능 을 놓친 언어에서 가장 빛납니다 .