webForumDet fria alternativet

.Net-Class för att testa hastigheter på funktioner/subbar

Programmering

0 svar · 5 108 visningar · startad av Travoni

Medlem sedan okt. 20041 556 inlägg
Frågan#1
    Sub page_load(ByVal s As Object, ByVal ev As EventArgs) Handles Me.Load
        Dim st As SpeedTester
        st = New SpeedTester(Me, "ListLen1", 1, New Object() {"Detta, är, ett, hastighetstest,, som, jag, nu,, utför,,,", ","})
        results.Text = st.ToString()
        st = New SpeedTester(Me, "ListLen2", 1, New Object() {"Detta, är, ett, hastighetstest,, som, jag, nu,, utför,,,", ","})
        results.Text += "<br />" & st.ToString
        st = New SpeedTester(Me, "ListLen3", 1, New Object() {"Detta, är, ett, hastighetstest,, som, jag, nu,, utför,,,", ","})
        results.Text += "<br />" & st.ToString
    End Sub

'Räknar förekomsten av kommatecken med en replace
    Public Function ListLen1(ByVal inStr As String, ByVal chr As Char) As Int16
        Return CLng(inStr.Length - inStr.Replace(chr, String.Empty).Length)
    End Function

'Räknar förekomsten av kommatecken med split
    Public Function ListLen2(ByVal inStr As String, ByVal chr As Char) As Int16
        Return CLng(inStr.Split(chr).Length - 1)
    End Function

'Räknar förekomsten av kommatecken med regexp
    Public Function ListLen3(ByVal inStr As String, ByVal chr As Char) As Int16
        Return New Regex(chr, RegexOptions.Compiled).Matches(inStr).Count
    End Function
Imports Microsoft.VisualBasic.CallType
Imports System
Imports System.Runtime.InteropServices
Imports System.ComponentModel
Imports System.Threading

Public Class SpeedTester
        Private _FunctionToTest As String
        Private _TimesToRun As Integer
        Private _Args() As Object
        Private _ObjectRef As Object

        Sub New(ByVal ObjectRef As Object, ByVal FunctionToTest As String, ByVal TimesToRun As Integer, ByVal Args() As Object)
            Me._ObjectRef = ObjectRef
            Me._FunctionToTest = FunctionToTest
            Me._TimesToRun = TimesToRun
            Me._Args = Args
        End Sub

        Public Overrides Function ToString() As String
            Dim list As New Generic.List(Of Double)
            For i As Integer = 0 To _TimesToRun
                Dim hpt As New HiPerfTimer
                hpt.Start()
                For x As Int32 = 0 To 1000
                    CallByName(_ObjectRef, _FunctionToTest, vbMethod, _Args)
                Next x
                hpt.Stop()
                list.Add(hpt.Duration)
            Next i

            Dim sum As Double = 0.0
            For Each Item As Double In list
                sum += Item
            Next
            Return String.Format("{0}: {1}", _FunctionToTest, sum.ToString)
        End Function

        Public Class HiPerfTimer

            <DllImport("Kernel32.dll")> _
            Private Shared Function QueryPerformanceCounter(ByRef lpPerformanceCount As Long) As Boolean
            End Function

            <DllImport("Kernel32.dll")> _
            Private Shared Function QueryPerformanceFrequency(ByRef lpFrequency As Long) As Boolean
            End Function

            Private startTime As Long
            Private stopTime As Long
            Private freq As Long

            Public Sub New()
                startTime = 0
                stopTime = 0
                If QueryPerformanceFrequency(freq) = False Then
                    Throw New Win32Exception
                End If
            End Sub

            Public Sub Start()
                Thread.Sleep(0)
                QueryPerformanceCounter(startTime)
            End Sub

            Public Sub [Stop]()
                QueryPerformanceCounter(stopTime)
            End Sub

            Public ReadOnly Property Duration() As Double
                Get
                    Return CType((stopTime - startTime), Double) / CType(freq, Double)
                End Get
            End Property
        End Class
    End Class
366 ms totalt · 4 externa anrop · v20260731065814-full.1dc6f849
123 ms — deklarationer (db)
116 ms — hämta statistik (db)
126 ms — hämta tråd, inlägg och bilagor (db)
122 ms — ändringar (db)