2014-06-16 30 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 

所以非常簡單。奇怪的部分是超級函數比任何一個簡單函數都快兩倍(我的測試結果是「1076 2122」)。這是沒有道理的..我試圖尋找我可能做錯了,但我不能看到它。有人可以解釋這一點嗎?

回答

0

您沒有爲簡單功能設置返回類型。所以他們返回Object類型。
因此,當使用simpleFunctionNeg功能應用你轉換IntegerObject類型返回時的值,然後回從ObjectInteger時分配返還價值給您的變量

設置返回值IntegersimpleFunctionNeg很少投標更快然後superfunction

+0

facepalm,當然! :D仍然,結果令人鼓舞,足以沿着選擇路線走下去。 –