2011-07-18 4 views
2

은 다음 옵션 중 어느 것이 더 효율적인지 궁금해하고있었습니다. 어떤 제안?어느 쪽이 더 효율적입니까? 코드의 하드 코딩 된 문자열 - 또는 - 문자열 참조를 재사용 하시겠습니까?

목록 1

string header = "Header 1"; // create a string variable and reuse 
client.AddMessage(header, ...); 
client.AddMessage(header, ...); 
client.AddMessage(header, ...); 
client.AddMessage(header, ...); 
client.AddMessage(header, ...); 
... 

목록 2

client.AddMessage("Header 1", ...); // hard code the string in each call 
client.AddMessage("Header 1", ...); 
client.AddMessage("Header 1", ...); 
client.AddMessage("Header 1", ...); 
client.AddMessage("Header 1", ...); 
.... 
+0

전혀 차이가 없을 것이라고 생각합니다. 첫 번째 경우에서 텍스트를 변경하는 것이 더 쉽습니다. ! – V4Vendetta

답변

6

당신은 아마 (수) 마이크로 최적화 이런 종류의 신경 안 : 어떤 문제, 여기입니다 maintenability :

  • 당신은 단지 하나의 문자열을해야합니까?
  • 또는 몇 가지 고유 한 값을 가질 수 있습니까?


+0

+1 "do not microoptimise". 유지 보수가 훨씬 더 중요합니다. –

+0

최적화조차되지 않습니다. 그들은 모두 같은 메모리 주소를 가리키고 있습니다. 그러나 유지하기가 훨씬 더 어렵습니다. – Rob

3

문자열은 .NET 세계에서 interned, 그래서 둘 중 하나는 같은 방식으로 작동합니다.

즉, 성능면에서 차이가 없습니다.

유지 관리 가능성 - 헤더 이름을 변경해야하는 경우 옵션 1이 더 좋습니다 (DRY).

0

문자열이 다시 사용됩니다 (interned). 그래서 그들은 모두 똑같이 효율적이어야합니다. 나는 Listing 1이 더 유지 보수 가능하다고 주장한다.

+0

필자는 목록 2가 더 읽기 쉽지만 반드시 목록 1은 유지 보수가 용이하다는 점에 동의합니다. –

+0

@ 배리, 나는 편집 된 목록 1.을 말하고자했다. –

0

둘 다 동일합니다. 문자열은 금지됩니다.

0

임 100 % 확실하지 (컴파일러 어쨌든, 내 생각, 당신을 위해 최적화해야합니다)하지만 난 당신이 당신의 문자열을 선언하는 경우에 CONST를 추가 할 수 있습니다 같은 일에 대해 그 생각 당신은 더 많은 성능을 원하지만 측정 가능한 차이를 볼 수있을 것이라고는 생각하지 않습니다.

Listing 1은 코드의 한 부분을 변경하여 값을 변경할 수있는 한 가지 이점이 있습니다 ...

0

첫 번째 옵션은 리팩토링을 위해 더 효율적입니다. 코드를 변경하려는 경우 한 줄만 변경하면됩니다. 또한 항상 컴파일 타임에 정의 된 동일한 값이 될 경우 상수를 사용하는 것이 좋습니다.

3

목록 1에 나와있는 항목이 많을 것으로 의심됩니다. 목록 2의 모든 개별 문자열은 최적화 도구가 장면 뒤에서 일을하지 않는 한 차례로 작성되어야하기 때문에 말하고 싶습니다.

버전 1을 사용하고 있지만 값을 변경하지 않을 경우 const 대신 사용하십시오. 당신이 정말로이 코드 조각 성능 병목 판단되는 경우

const string HEADER = "Header 1"; 
+0

어떻게 했는가 –

+0

모든 문자열을 만들 필요가 없습니다. 모두 같은 메모리 주소를 가리키고 있습니다. – Rob

0

, 당신은 두 가지 방법으로 프로파일을 시도해야하고, 당신은 더 효율적입니다을 알 수 있습니다.

측정하기에 충분하지 않은 경우을 최적화하지 마십시오.

그냥 호기심을 묻는다면, 성능 측면에서 보면 똑같은 방향으로 진행됩니다. 즉, 두 번째 작업을 수행하지 마십시오. 유지 관리해야하는 사람이 누구든 당신을 죽일 수 있기 때문입니다.

+0

내가 유지 관리해야한다면 , 나는 바보에 대해 불평하고, 빠른 검색으로 그것을 고치고 대체하고, 바보가 누구인지를보기 위해 소스 제어를 체크한다. (그리고 그것이 내가 아니길 바란다.) –

+0

무슨 말이야? "그것을 유지해야 할 사람이 마치 당신이 어디에서 살고 있는지를 아는 도끼를 휘두르는 정신병자"처럼 작성하십시오. –

관련 문제