저는 여러분 모두에게 짧은 디자인 문제를 가지고 있습니다. 가능한 한 빨리 실행해야하는 메소드가 있지만 예외로 발생한 오류에 대한 정보도 제공해야합니다.디자인 - 예외를 실행하거나 피할 수 있습니까?
함수가 루프 내에서 천 번 호출되지만 매우 드물게 예외가 발생합니다 (< 값의 1 %가 오류를 일으킴). 함수는 매우 간단한 수학 연산 만 계산하며 LINQ 또는 다른 것을 사용하여 메서드를 호출하지 않습니다.
지금까지 상황이 좋았으며, 다음은이 방법을 해결해야하는 두 가지 시나리오에 대한 설명입니다. 나에게 추천했다
int FastMethod(int number)
{
if (number <= 0)
{
throw new ArgumentOutOfRangeException();
}
// (...) more parameter validations
// do some operations with the number here
}
다른 솔루션이었다에 실행 :
내 자신의 솔루션은 단지합니다 (ramaining 방법에서 예외를 방지하기 위해) 계산하기 전에 각 매개 변수를 확인하는 가장 일반적인 방법이었다 오류가 발생하여 catch 된 예외 만 다시 throw하십시오.
int FastMethod(int number)
{
try
{
// do some operations with the number here
}
catch (Exception ex)
{
throw (ex);
}
}
그럼 뭐라고 하시겠습니까?
두 번째 시나리오는 성능을 향상시킬 수있는 if 문을 모두 호출 할 필요는 없지만 필자 의견으로는 잘못 설계된 것처럼 보입니다. 내가 가르쳐 줄 수 있겠습니까?
'catch (Exception ex) {throw ex; }'는 완전히 쓸모없는 코드입니다. 그게 어쨌든 런타임 않습니다. 'catch' 블록이 rethrow 이외의 것을 아무것도하지 않으면, 거기에 있어서는 안됩니다. – michaelb958
먼저 매개 변수 유효성 검사를 권장 하시겠습니까? –
얼마나 많은 매개 변수 유효성 검사가 관련되어 있는지 잘 모르겠습니다. 유효성 검사의 정확성을 유지하기 위해'||'s 및'&&'를 사용하여 유효성 검사를 적절하게 그룹화 할 수 있습니다. 다른 방법은 FastMethod가 그것을 검증하는 것을 피하기 위해 잘 검증 된 번호를 전달하는 것입니다. – Vishy