2014-06-16 3 views
-1

그래서 문자열 검색 기능을 코딩 했으므로 앞으로 또는 뒤로 이동하거나 포괄적이거나 배타적 일 필요가 있었으므로 결국 4로 끝납니다. 그런 다음 특정 특정 사항을 무시하고 더 많은 기능을 필요로했습니다. 필요하지 않으면 서 8+ 기능을 유지하는 것보다 선택적 부울 매개 변수를 사용하여 약간 더 큰 기능을 만드는 것이 더 쉬울 것이라고 생각했습니다.vb.net 함수는 선택적 매개 변수를 기준으로 분기 성능을 제공합니다.

비록 이것이 중요한 주력 기능이기 때문에 성능이 중요하므로 간단한 테스트를 통해이 작업을 통해 얼마나 많은 것을 잃을 지 알 수 있습니다. 코드는 다음과 같습니다 :

main window: 
Private Sub testbutton_Click(sender As Object, e As RoutedEventArgs) Handles testbutton.Click 
    Dim rand As New Random 
    Dim ret As Integer 
    Dim count As Integer = 100000000 

    Dim t As Integer = Environment.TickCount 

    For i = 0 To count 
     ret = superfunction(rand.Next, False) 
    Next 

    t = Environment.TickCount - t 
    Dim t2 As Integer = Environment.TickCount 

    For i = 0 To count 
     ret = simplefunctionNeg(rand.Next) 
    Next 

    t2 = Environment.TickCount - t2 
    MsgBox(t & " " & t2) 
End Sub 

The functions: 

Public Module testoptionality 
    Public Function superfunction(a As Integer, Optional b As Boolean = False) As Integer 
     If b Then 
      Return a 
     Else 
      Return -a 
     End If 
    End Function 
    Public Function simpleFunctionPos(a As Integer) 
     Return a 
    End Function 
    Public Function simplefunctionNeg(a As Integer) 
     Return -a 
    End Function 

End Module 

매우 간단합니다. 기묘한 부분은 superfunction이 단순한 함수 중 하나보다 지속적으로 두 배 빠릅니다 (내 테스트 결과는 "1076 2122"입니다). 이것은 말이 안된다. 나는 내가 잘못했을지도 모르는 것을 찾고자했지만 나는 그것을 볼 수 없다. 아무도 이것을 설명 할 수 있습니까?

답변

0

간단한 기능으로 반환 유형을 설정하지 않았습니다. 따라서 Object 유형을 반환합니다. 당신이 simpleFunctionNeg 기능 응용 프로그램을 사용할 때 할당에 값을 반환 할 때 Object에서 Integer의 뒤쪽으로 값을 반환하고, 때
그래서 Object 유형 Integer 변환하여 변수

superfunction

다음 빠른 Integer simpleFunctionNeg이었다에 작은 입찰을 반환 값을 설정 한 후
+0

facepalm, 물론! : D 조 여전히 결과는 옵션 노선을 따라 가기에 충분합니다. –

관련 문제