2010-06-14 3 views
3

X라는 변수가 있다고 상상해보십시오. 5 초마다 X = true로하고 싶다고합시다. (이 5 초 사이에 true 또는 false가 될 수 있지만 5 초가되면 true로 재설정됩니다).무엇이 더 효율적입니까? 검사 == 아니면 그냥 변수를 돌연변이?

값이 이미 true인지 확인한 다음 그렇지 않은 경우 true로 다시 지정 하시겠습니까? 아니면 X = true일까요?

즉, 더 빠르게 실행될 수 있습니까? 그것은가없는 경우

if(x==false){ 
    x = true; 
} 

한편

x = true; 

대, 첫 번째 프로그램이 변수를 돌연변이하지 않습니다. 반면에, 두 번째 프로그램은 X가 같은지 확인할 필요가 없습니다. 잠수함이 곧바로 뛰어 들어갑니다.

+1

(x에 부작용이있는 경우 (예 : 이벤트 전달, 응답자 응답 등)에는 큰 차이가 없습니다.이 경우 응답은 "필요에 따라 다릅니다"). 프로그램 논리에서 의미가있는대로하십시오. –

답변

8
  • 거의 항상 중요하지 않습니다. 가장 이해하기 쉽고 유지 보수가 쉬운 코드를 작성하십시오. 필요한 경우에만 최적화하십시오.
  • 가장 좋은 방법은 테스트하는 것입니다. 코드 프로파일.
  • 어느 쪽이 빠른지는 브라우저에 따라 다를 수 있습니다.
  • 변수가 대개 true인지 보통 false인지에 따라 속도가 더 빠릅니다.
  • 그렇다고해서 대부분의 시나리오에서 변수를 테스트하지 않고 설정하는 것이 빠를 것이라고 생각합니다. 시간의 X == 거짓 90 %, 그 다음 X에 바로 할당이 빨리 될 경우
+0

동의. 100 %를 테스트하고 50 %를 변경하는 대신 100 % 변경하는 데 돈을 썼습니다. –

+0

@Mike M. 그리고 50 %는 사실이 아닐 수도있는 가정입니다. 그리고 cwap이 또한이 점을 또한 만들었다는 것을 나는 볼 수있다. –

+1

'x'가 단순한 변수가 아니라 "클래스"또는 큰 배열과 같은 경우 확인하고 설정하는 것이 좋습니다. –

4

정말 데이터 :

에 따라 달라집니다.

이것은 당신이 아마 효율성에 대해 걱정하지 않는 장소 중 하나입니다, 그리고 당신이 정말로 그것을 프로파일 않으면 ..

+0

거짓 대 빈도에 대해 생각할 때 +1. –

1

효율 당신이입니다 분에 의해 달성하려는은 효율성을 비교 귀하의 전체 품질을 달성했습니다 디자인.

1

면책 사항/경고 :

이것은 마이크로 최적화이며, 사용자가 측정 할 수있는 방법으로 프로그램의 효율성에 영향을 미치지 않습니다. 모든 컴파일러 최적화 기능을 끄고 우수한 프로파일 러를 실행하면 효과를 계량화 할 수 있지만 사용자는 아무 것도 알 수 없습니다.

문제의 코드가 몇 초마다 실행되는 상황에서 특히 그렇습니다. 프로파일 링에 소요 된 시간은 응용 프로그램의 다른 부분을 개선하는 데 더 효과적입니다.

또한 이러한 상황에서 요구 사항에 따라 런타임 효율성 만 고려한 경우에도 병목 현상이없는 마이크로 최적화보다 가독성이 항상 우수해야합니다. 따라서이 상황에서 내가 권장하는 코드는 x=true입니다. 읽기 쉽고 이해하기 쉽기 때문입니다.

마지막으로, 검사를 추가하면 속도가 향상 될 것이므로 컴파일러는 이미 알고 있고 아마도이를 수행 할 것이기 때문에 x=true으로 잘못 갈 수는 없습니다 (프로파일 러를 실행하기 전에 최적화를 해제해야하는 이유입니다).


는 답 :

이 알아낼 수있는 유일한 진정한 방법은 프로파일입니다. 0 테스트 (x == false)는 기본적으로 전혀 시간이 필요하지 않으므로 x가 true 일 때 저장하는 시간 때문에 포함 할 가치가 있습니다. 또는 x가 거짓 인 것으로 판명되면 너무 많은 시간을 낭비하는 테스트가 오래 걸린다는 것을 알 수 있습니다.

내 생각 엔 테스트가 필요 없다고 생각합니다. 그것은 0 테스트 및 기타 비트 연산 (및 등)이 모두 너무 빠르기 때문에 대개 같은 기본 시간을 사용한다고 생각하기 때문입니다. 그리고 0 테스트가 OR 연산과 동일한 시간 (true로 설정)이 소요되면 0 테스트는 시간 낭비입니다. 프로파일 링은 나에게 잘못된 결과를 가져올 수 있으며, 비트 연산과 관련한 느슨한 가정을 기반으로합니다. 따라서 프로파일 러를 실행하여이 결과를 얻는다면 분명히 결과에 관심을 가질 것입니다.

관련 문제