|
|
Title | Compare the speed of passing variables ByRef and ByVal |
Keywords | ByVal, ByRef, speed, performance |
Categories | Tips and Tricks |
|
|
Make routines that pass variables ByRef and ByVal and see which is faster.
The differences are so tiny it's not really worth worrying about. You should use ByVal whenever you don't need to modify the value.
|
|
Private m_NumAssignments As Long
Private Sub ByteByRef(ByRef X As Byte)
Dim i As Long
For i = 1 To m_NumAssignments
X = 123
Next i
End Sub
Private Sub IntegerByRef(ByRef X As Integer)
Dim i As Long
For i = 1 To m_NumAssignments
X = 123
Next i
End Sub
Private Sub ByteByVal(ByVal X As Byte)
Dim i As Long
For i = 1 To m_NumAssignments
X = 123
Next i
End Sub
Private Sub IntegerByVal(ByVal X As Integer)
Dim i As Long
For i = 1 To m_NumAssignments
X = 123
Next i
End Sub
Private Sub cmdGo_Click()
Dim num_trials As Long
Dim start_time As Single
Dim stop_time As Single
Dim i As Long
Dim value_integer As Integer
Dim value_byte As Byte
lblIntegerByRef.Caption = ""
lblIntegerByVal.Caption = ""
lblByteByRef.Caption = ""
lblByteByVal.Caption = ""
Screen.MousePointer = vbHourglass
DoEvents
' Integers.
num_trials = CLng(txtIterations.Text)
m_NumAssignments = CLng(txtAssignments.Text)
start_time = Timer
For i = 1 To num_trials
IntegerByRef value_integer
Next i
stop_time = Timer
lblIntegerByRef.Caption = Format$(stop_time - _
start_time, "0.00")
DoEvents
start_time = Timer
For i = 1 To num_trials
IntegerByVal value_integer
Next i
stop_time = Timer
lblIntegerByVal.Caption = Format$(stop_time - _
start_time, "0.00")
DoEvents
' Bytes.
start_time = Timer
For i = 1 To num_trials
ByteByRef value_byte
Next i
stop_time = Timer
lblByteByRef.Caption = Format$(stop_time - start_time, _
"0.00")
DoEvents
start_time = Timer
For i = 1 To num_trials
ByteByVal value_byte
Next i
stop_time = Timer
lblByteByVal.Caption = Format$(stop_time - start_time, _
"0.00")
DoEvents
Screen.MousePointer = vbDefault
End Sub
|
|
|
|
|
|