2010-03-18 4 views
4

나는 어느 것이 더 싸울 지 궁금 해서요, 경계를 벗어난 인덱스에 try catch 블록을 사용하거나 다차원 배열의 길이를 검사하고 값을 비교하고 싶습니까?Try-Catch 또는 Check Length?

나는 변수의 길이를 저장할 수 있고 상대적으로 값이 싸면 할 수 있기 때문에 길이라고 느낍니다. 나는 단지 값 비싼 try-catch가 얼마나 확실하지 않다.

감사합니다.

답변

11

길이를 확인하는 것은 예외를 잡는 것보다 훨씬 저렴합니다. try..catch 블록을 사용하면 예외를 잡기 위해 여분의 구조체를 코드에 추가하고 있습니다. 괜찮습니다. 잘못은 아닙니다. 그러나 경계의 길이를 확인할 수 있으면 대신 수행하십시오.

+0

동의합니다. try/catch는 배열의 길이 매개 변수를 확인하는 것과 매우 비쌉니다. +1 –

+0

모두에게 감사드립니다! – Shaded

+0

downvoter에게 - 왜 당신이 downvoted 댓글을 신경? –

2

예외를 throw하는 것은 (스택 추적을 생성해야하므로) 값 비싼 작업입니다. 길이를 확인하십시오.

+1

예외가 발생하는 빈도에 따라 다를 수 있습니다. 매번 길이를 확인했지만 10 만회마다 1을 벗어나면 100,000 경계 검사보다 훨씬 더 비싼 단 하나의 예외입니까? –

+0

@ Eric Petrolje : 정수 비교는 저렴한 연산입니다. CPU는 ALU (산술 논리 단위) 중 하나에서 단일 연산으로 실행할 수 있습니다. – Powerlord

0

귀하의 상황에 대해 더 효율적인지 궁금한 점이 있다면 "측정"이라고 말하고 싶습니다.

예를 들면 다음과 같습니다. 범위를 벗어나는 조건이 매우 드문 경우? 따라서 out-of-bound는 절대로 throw되지 않습니다 ...이 경우, 여분의 "수동"경계 검사가 느려질 수 있습니다.

경고 : try/catch는 많은 범위를 벗어난 검사가 필요하므로 try 설정이 중요하지 않습니다.

19

예외를 throw하는 것은 정수 값을 검사하는 것과 비교할 때 매우 비쌉니다. 그러나 이것은 부적절합니다. 더 중요한 것은 예외가 싸다하더라도 여전히 잘못된 선택 일 것입니다. 예외의 요점은 예외적 발생을 나타냅니다. 예외는 이상하게 희귀하고 바람직하게는 치명적인 것을 나타내는 데에만 이상적으로 사용해야합니다.

경계를 벗어나는 배열에 액세스하는 경우 버그이 표시됩니다. 버그 수정. 예외 처리기 버그를 숨기고은 으로 수정하지 않습니다.