문제

Visual Basic에서 IIf 문 대신 If 함수를 사용할 때 성능 차이가 있습니까?

도움이 되었습니까?

해결책

VB에는 질문이 언급하는 다음과 같은 유전자 태그 코드가 있습니다. 라코 디스

첫 번째는 기본적으로 C #의 삼항 조건 연산자이고 두 번째는 통합 연산자입니다 (If가 아닌 경우 result를 반환합니다.이 경우 Nothing가 반환 됨).따라서 "Alternative"If를 대체했으며 후자는 더 이상 사용되지 않습니다.

C #에서와 마찬가지로 VB의 조건부 IIf 연산자 단락이므로 이제 If 함수를 사용할 수없는 다음을 안전하게 작성할 수 있습니다. 라코 디스

다른 팁

IIf()는 참 및 거짓 코드를 모두 실행합니다.숫자 할당과 같은 간단한 일의 경우 이것은 큰 문제가 아닙니다.그러나 모든 종류의 처리가 필요한 코드의 경우 일치하지 않는 조건을 실행하는주기를 낭비하고 부작용을 일으킬 수 있습니다.

코드 그림 : 라코 디스

출력 : 라코 디스

또한 IIf의 또 다른 큰 문제는 인수 [1]에있는 모든 함수를 실제로 호출하므로 다음과 같은 상황이 발생하는 경우입니다. 라코 디스

실제로 예외가 발생합니다. 이는 대부분의 사람들이 함수를 처음 볼 때 작동한다고 생각하는 방식이 아닙니다.이로 인해 응용 프로그램에서 버그를 수정하기가 매우 어려울 수도 있습니다.

[1] IIf 함수- http : // msdn.microsoft.com / en-us / library / 27ydhh0d (VS.71) .aspx

유형 추론 메커니즘을 올바르게 사용하려면 IIf 대신 If를 사용하는 것이 좋습니다 (Option Infer On)

이 예에서 키워드는 If를 사용할 때 문자열로 인식됩니다. 라코 디스

그렇지 않으면 객체로 인식됩니다. 라코 디스

이 사람 에 따르면 IIf는 If /의 최대 6 배까지 걸릴 수 있습니다.그때.YMMV.

무엇보다 가독성이이 경우 성능보다 더 선호 될 것입니다.IIF가 더 효율적이더라도 대상 청중이 쉽게 읽을 수는 없습니다 (Visual Basic에서 작업하는 경우 다른 프로그래머가 코드를 쉽게 읽을 수 있기를 원한다고 가정합니다. 이는 VB의 가장 큰 장점입니다 ...제 생각에는 IIF와 같은 개념에서 잃어버린 것입니다).

또한 "IIF는 함수입니다.언어 구문의 일부입니다. " ... 이것은 실제로 If가 더 빠르다는 것을 의미합니다 ... 그 외에 다른 것이 없다면 If 문을 작은 opcode 세트로 직접 요약 할 수 있습니다.해당 기능에서 찾은 논리를 수행하기 위해 메모리의 다른 공간으로 이동하는 것보다.진부한 차이 일 수 있지만 주목할 가치가 있습니다.

If와 IIf의 주요 차이점은 다음과 같습니다.

  • If (테스트 [부울], 문 1, 문 2) 테스트 값에 따라 satement1 또는 statement2가 실행됨을 의미합니다. (하나의 문만 실행됩니다.)

  • Dim obj= IIF (test [boolean], statement1, statement2) 이는 두 명령문이 모두 실행되지만 테스트 값에 따라 둘 중 하나가 (obj)에 값을 반환 함을 의미합니다. 따라서 문 중 하나가 예외를 throw하면 어쨌든 (IIf)에서 throw되지만 (If)에서는 조건이 해당 값을 반환하는 경우에만 예외를 throw합니다.

... 6 배까지 걸리는 이유에 대해서는 위키를 인용하십시오. <인용구>

IIf는 라이브러리 함수이기 때문에 항상 오버 헤드가 필요합니다. 함수 호출, 반면 조건부 운영자는 인라인 코드.

본질적으로 IIf는 C ++ / C #의 삼항 연산자와 동일하므로 원하는 경우 멋진 한 줄의 if / else 형식 문을 제공합니다.원하는 경우 평가하는 기능을 제공 할 수도 있습니다.

기능이 다릅니다!아마도 IF 문만 사용하면됩니다. IIF는 두 기능을 모두 수행하고 표준 IF 문을 수행하기 때문에 항상 느립니다.

왜 IIF 기능이 있는지 궁금하다면 이것이 설명이 될 것입니다. 라코 디스

그러면 카운터는 2가되지만 s는 "YES"만됩니다.이 카운터는 쓸모가 없다는 것을 알고 있지만 때로는 실행하는 데 둘 다 필요한 기능이 있으며 IF가 참인지 거짓인지는 중요하지 않으며 그중 하나의 값을 변수에 할당하면됩니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top