Imports System
Imports System.ComponentModel
Imports System.Runtime.InteropServices
Public Class StopWatch
<DllImport("Kernel32.dll")> _
Shared Function QueryPerformanceCounter(ByRef lpPerformanceCount As Long) As Boolean
End Function
<DllImport("Kernel32.dll")> _
Shared Function QueryPerformanceFrequency(ByRef lpFrequency As Long) As Boolean
End Function
Private start As Long
Private stops As Long
Private frequency As Long
Private Const multiplier As Decimal = 1000000000.0
Public Sub New()
If QueryPerformanceFrequency(frequency) = False Then
Throw New Win32Exception
End If
End Sub
Public Sub Starts()
QueryPerformanceCounter(start)
End Sub
Public Sub Parse()
QueryPerformanceCounter(stops)
End Sub
Public Function Duration(ByVal iterations As Integer) As Double
Return (((CType((stops - start), Double) * CType(multiplier, Double)) _
/ CType(frequency, Double)) / iterations)
End Function
End Class
Dim mTimer As New StopWatch
'Measure without boxing
mTimer.Starts()
For i = 0 To 1000000000.0
'do some work to time
Next
mTimer.Parse()
'Calculate time per iteration in nanoseconds
dim result as decimal = mTimer.Duration(i)