2013-07-31 3 views
5

Joe Duffy's Blogstring.Substring을 사용하는 것이 string.Split보다 효율적이라는 것을 의미합니다.String.Split보다 String.Substring이 더 효율적입니까?

Substring 메서드가 새로운 문자열을 할당하지 않는다고 말하는지 또는 불필요한 할당을하지 않기 때문에 더 효율적인지 알 수 없습니다. 어떻게하면 더 효율적인지 예를 보여 주실 수 있습니까?

첫 번째 예제는 배열을 만든 다음 배열의 각 문자열을 처리하는 것으로 이해합니다.

string str = ...; 
string[] substrs = str.Split(','); 
foreach (string subtr in substrs) { 
Process(substr); 
} 

는 어떻게 더 효율적 다음

string str = ...; 
int lastIndex = 0; 
int commaIndex; 
while ((commaIndex = str.IndexOf(',', commaIndex)) != -1) { 
    Process(substr, lastIndex, commaIndex); 
    lastIndex = commaIndex + 1; 

그때 문자열을 처리 쉼표의 인덱스를 찾기 위해 String.IndexOf을 사용하고 표시되는 내용. 나는 자신의 처리 중에 데이터를 추출하기 위해 String.Substring을 사용하려고한다고 가정합니다. 아래 의견 중 하나는 그가 문자로 문자를 가져올 수 있다고 제안했습니다. 그는 숯을 배열 할 가능성이있는 다음 콤마를 칠 때까지 캐릭터를 당길 것입니까?

+0

예 sting.Index of는 쉼표의 색인을 찾는 데 사용되지만가 s 프로세스 메소드에서는 하위 색인을 작성하여 해당 색인 내의 데이터를 추출해야합니다. 권리? –

+0

나는 빗나가고있다 - 예제는 정말로 혼란 스럽다. – BrokenGlass

+0

"String.Split과 String.Substring처럼 숨어있는 지뢰가있는 API가있다"는 것은'Substring '이 효율적이지 않다고 생각한다는 의미이다. 그리고 "String은 인덱서를 가지고 있으며 형식 보증이되어 있습니다. 따라서 최소한의 버퍼 오버런은 발생하지 않습니다"는 의미는 문자로 부분 문자열에 액세스하려는 의도가 있음을 의미합니다. 'Substring'을 사용합니다. – Blorgbeard

답변

7

좋은 슬픔.

오래된 농담 : 관리자는 프로그래머 A 또는 프로그래머 B가 더 나은 프로그래머인지 알고 싶었 기 때문에 컨테스트를 개최했습니다. 그들은 둘 다 주어진 복잡한 문제를 해결하기위한 프로그램을 작성하고, 최고의 프로그램을 작성한 사람이 이길 것입니다.

두 명의 프로그래머가 답변을 제출했습니다. 프로그래머 A의 프로그램이 가장 빠르게 실행되었고, 프로그래머 B가 프로그래머 A의 프로그램에서 제공 한 대답이 약간 벗어났다는 점을 지적하자 관리자가 그를 승자로 선언하려고했습니다.

"하지만 내 프로그램은 여전히 ​​가장 빠른, 내가 이길 자격이있다", 프로그래머 A. 말했다

"답이 정확하지 않은 경우, 나는 10 배 빠른 당신보다하는 프로그램을 작성할 수 있습니다 ", 말쑥한 프로그래머 B.

Joe Duffy의 두 번째 예 (string.Split() 사용을 피하는 경우)가 잘못되었습니다. 컴파일되지 않습니다. "substr"변수는 정의되지 않습니다.

나는 내 경우를 안다.

+0

좋은 농담, :), 나는 그것을 좋아한다. – David

+1

좋은 농담이지만, 당신의 요점은 무엇인지 모르겠습니다. Joe Duffy의 실수는 단순한 오타입니다. "substr"대신 "str"이라고 말하고자하는 것입니다. – Blorgbeard

+4

@Blorgbeard : 그는 우연히 코드를 깨뜨 렸습니다. 복잡한 일이 많을수록 복잡해지기 쉽습니다. 특히 복잡성이 커지는 경우. 그의 경우에 도움이되지 않는다. 단지 오타 일 뿐이다. 부분 문자열에 대한 불만을 표시하기 전에 코드를 테스트하거나 프로파일 링하지 않아도된다는 증거입니다. 실제로 그것을 VS로 입력하고 컴파일하면 오류가 나타납니다. – cHao

관련 문제