IIf ()와 If의 성능 차이
Visual Basic IIf
에서 If
문 대신 함수를 사용할 때 성능 차이가 있습니까?
VB는 If
질문이 제시되는 다음 보고를 가지고 있다고 생각합니다.
' Usage 1
Dim result = If(a > 5, "World", "Hello")
' Usage 2
Dim foo = If(result, "Alternative")
첫 번째는 기본적으로 C 번호의 삼항 조건 연산자이고 두 번째는 병합 연산자입니다 (이 result
아닌 Nothing
경우 반환,이 경우 반환 "Alternative"
). If
교체 따라서 IIf
되었으며 후자는 더 이상 사용되지 않습니다.
C #에서와 다음에 VB의 조건부 If
연산자가 단락 이제 IIf
함수를 사용하여 불가능한 다음을 사용할 수 있습니다 .
Dim len = If(text Is Nothing, 0, text.Length)
IIf()
참 및 거짓 코드를 모두 실행합니다. 숫자 할당과 같은 간단한 작업의 경우 큰 문제가 아닙니다. 그러나 모든 종류의 처리가 필요한 코드의 경우 일치하지 않는 조건을 실행할 수 있습니다.
코드 그림 :
Module Module1
Sub Main()
Dim test As Boolean = False
Dim result As String = IIf(test, Foo(), Bar())
End Sub
Public Function Foo() As String
Console.WriteLine("Foo!")
Return "Foo"
End Function
Public Function Bar() As String
Console.WriteLine("Bar!")
Return "Bar"
End Function
End Module
출력 :
Foo!
Bar!
또한 IIf의 또 다른 큰 문제는 인수 [1]에있는 모든 함수를 호출 한 다음과 같은 상황이 발생하는 경우입니다.
string results = IIf(Not oraData.IsDBNull(ndx), oraData.GetString(ndx), string.Empty)
실제로 예외가 발생합니다. 대부분의 사람들이 작동하는 방식이 아닙니다. 이것은 또한 응용 프로그램에서 버그를 수정하기 매우 어렵게 만들 수도 있습니다.
[1] IIf 함수 -http : //msdn.microsoft.com/en-us/library/27ydhh0d (VS.71) .aspx
형식 추론을 사용하는 것이 좋습니다 (옵션 Infer On).
이 예에서 키워드는 사용할 때 사용할 수 있습니다.
Dim Keywords = If(String.IsNullOrEmpty(SelectedKeywords), "N/A", SelectedKeywords)
개체로 인식됩니다.
Dim Keywords = IIf(String.IsNullOrEmpty(SelectedKeywords), "N/A", SelectedKeywords)
이 사람 에 따르면 IIf는 If / Then보다 최대 6 배까지 걸릴 수 있습니다. YMMV.
또한이 경우 성능보다 가독성이 더 선호 될 것입니다. (Visual Basic에서 쉽게 읽을 수있는 다른 프로그래머가 코드를 쉽게 읽을 수 있습니다. 이는 VB의 가장 큰 장점입니다 ... 제 의견으로는 IIF와 같은 개념으로 축소됩니다.)
또한 "IIF는 함수입니다. IF는 언어 구문의 일부입니다." ... 이것은 실제로 더 빠르다는 것을 의미합니다. 그 외에는 문을 직접 요약 할 수 있습니다. 상기 함수에서 발견 된 것이 수행하기 위해 메모리의 다른 공간으로 이동하지 않고 작은 opcode 세트에. 아마도 진부한 차이이지만 주목할 가치가 있습니다.
If와 IIf의 주요 차이점은 다음과 가변합니다.
If (test [boolean], statement1, statement2)는 테스트 값에 따라 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 기능이 있는지 궁금하다면 이것이 설명이 될 것입니다.
Sub main()
counter = 0
bln = True
s = iif(bln, f1, f2)
End Sub
Function f1 As String
counter = counter + 1
Return "YES"
End Function
Function f2 As String
counter = counter + 1
Return "NO"
End Function
따라서 카운터는이 후 2가되지만 s는 "예"만됩니다. 이 카운터는 쓸모가 없다는 것을 알고 있지만 때로는 실행하는 데 둘 다 필요한 기능이 있으며 IF가 참인지 거짓인지는 중요하지 않으며 그중 하나의 값을 변수에 할당하면됩니다.
참고 URL : https://stackoverflow.com/questions/28377/performance-difference-between-iif-and-if
'IT' 카테고리의 다른 글
IOS에서 신속하게 내 응용 프로그램의 화면 잠금을 방지하는 방법 (0) | 2020.08.21 |
---|---|
C ++에서 .inl 파일의 중요성 (0) | 2020.08.21 |
android에서 두 이미지를 기계하여 imageview를 설정하십시오. (0) | 2020.08.21 |
특정 커밋을 위해 GitHub에서 .zip을 다운로드하는 방법은 무엇입니까? (0) | 2020.08.21 |
Flexbox 열을 왼쪽과 오른쪽으로 정렬하는 방법은 무엇입니까? (0) | 2020.08.21 |