2012-08-05 3 views
2

반복적 인 구문을 사용하면 성능이 더 좋을까요? 아니면 한 번 사용하고 대리자가 IF 문 출력을 기반으로 함수를 호출하는 데 사용 하시겠습니까? 대답은 분명히 위임자라고 말하고 싶지만 동일한 방법을 사용하는 여러 IF 문보다 반복적 인 다른 방법을 사용하는 것이 더 빠르거나 느리면 잘 모르겠습니다. 나는 그것이 올바르게 설명했으면 좋겠다.많은 IF 문 대 대의원?

추신 : 내가 알고 있어야하는 프레임 워크는 중요한 경우 XNA입니다.

+1

이 질문에 대한 대답은 실제로 우리에게 줄 수있는 것보다 많은 정보에 달려 있습니다. 두 가지를 모두 작성하고 두 가지를 모두 프로파일 링하고 결과를 비교해야합니다. 그러면 훨씬 더 확실한 답을 얻을 수 있습니다. –

+1

여기에는 많은 불명확 한 점이 있습니다. 클로저를 사용하는 대리인입니까? 아니면 rpocess의 초기에 한 번만 할당 되었습니까? 가상 메소드를 대신 활용할 수 있습니까? 대표자와 함께 사전을 사용하는 것에 대해 생각해 보셨습니까? – Lucero

+0

당신이 묘사하고있는 상태 머신처럼 들리는가요? – Dykam

답변

1

당신은 장단점이 있습니다. 가장 좋은 대답은 이미 주석으로 처리되었으며 둘 다 프로파일 링 한 다음 알아내는 것입니다. IF 문은 비교를 반복해야하기 때문에 더 많은 CPU를 사용할 수 있습니다. 반면에 델리게이트 사용은 더 많은 메모리를 필요로하며, 계속 유지해야하는 또 다른 객체입니다.

개인적으로 가장 잘하고 싶은 점은 (해당되는 경우 질문의 전체 내용을 모르는 경우) IF ELSE 문을 스위치 케이스로 바꾸는 것입니다. 이것은 상태 머신 및 기타 반복적 인 프로세스에 대해 정말 잘 작동하며, IF와 함께 제공되는 모든 분기를 제거합니다. 그러나 이것은 여러분이 검사하는 값이 모두 비교적 비슷하다고 가정하고 있습니다. 그렇지 않으면 컴파일러에 많은 고통을 초래할 것입니다.

+0

좋습니다, 감사합니다. 메모리와 성능 사이의 균형에 대해 +1합니다. 메모리를 잊어 버렸습니다 ... – Oztaco

1

이것은 유용한 기술입니다. 분명히, 소수의 if는 값이 비싸고 CPU가 분기 타겟을 쉽게 예측할 수 없으므로 대리자가 이해가되지 않습니다. 그리고 매우 많은 경우에 한 번 초기화 된 델리게이트가 의미가 있습니다.

손익분기 점이 어디에 있는지 확실하지 않습니다. 저것은 측정 될 필요가있다.

+0

+1 할 필요가 있다는 점을 지적하기 위해 +1하지만 leaf68은 한 번 위임을 바인드하려고합니다. 어떤 경우라도 분기 예측은 "if"캠프에 대한 완화 요소 일뿐입니다. –

+0

나는 if * can *을 예측하고 위임 할 수 없다고 말하고 싶었다. – usr