Timing Split; getting a handle on things.
Tonight I decided that, before I attempt to match the speed of Split, I'd better measure it out to see how fast it is. Here's the results of some simple tests...
Imports System.Text
Imports Microsoft.VisualBasic
Module StringTimers
Private mString As String
Private startTime, endTime As DateTime
Sub Main()
InitializeString()
Console.WriteLine("========== DoFunction() ==========")
DoFunction()
DisplayTime("DoFunction()")
DoFunction()
DisplayTime("DoFunction()")
DoFunction()
DisplayTime(vbCrLf & "DoFunction()")
Console.WriteLine(vbCrLf & vbCrLf & "========== DoMethod() ==========")
DoMethod()
DisplayTime("DoMethod()")
DoMethod()
DisplayTime("DoMethod()")
DoMethod()
DisplayTime(vbCrLf & "DoMethod()")
Console.WriteLine(vbCrLf & vbCrLf & "========== DoRegex_Compiled() ==========")
DoRegex_Compiled()
DisplayTime("DoRegex_Compiled()")
DoRegex_Compiled()
DisplayTime("DoRegex_Compiled()")
DoRegex_Compiled()
DisplayTime(vbCrLf & "DoRegex_Compiled()")
Console.WriteLine(vbCrLf & vbCrLf & "========== DoRegex_AdHoc() ==========")
DoRegex_AdHoc()
DisplayTime("DoRegex_AdHoc()")
DoRegex_AdHoc()
DisplayTime("DoRegex_AdHoc()")
DoRegex_AdHoc()
DisplayTime(vbCrLf & "DoRegex_AdHoc()")
Console.ReadLine()
End Sub
Private Sub InitializeString()
Dim sb As New StringBuilder
For i As Integer = 0 To 100000
sb.Append("a b c d" & vbCrLf)
Next
mString = sb.ToString
End Sub
Private Sub DoFunction()
Console.WriteLine("Entering DoFunction()...")
startTime = DateTime.Now()
Dim arr As String() = Split(mString, vbCrLf)
endTime = DateTime.Now()
End Sub
Private Sub DoMethod()
Console.WriteLine("Entering DoMethod()...")
startTime = DateTime.Now()
Dim arr As String() = mString.Split(New Char() {Chr(13), Chr(10)})
endTime = DateTime.Now()
End Sub
Private Sub DoRegex_Compiled()
Console.WriteLine("Entering DoRegex_Compiled...")
Dim re As New RegularExpressions.Regex("[\n\r]+", _
RegularExpressions.RegexOptions.Compiled Or RegularExpressions.RegexOptions.Singleline)
startTime = DateTime.Now()
Dim arr As String() = re.Split(mString)
endTime = DateTime.Now()
End Sub
Private Sub DoRegex_AdHoc()
Console.WriteLine("Entering DoRegex_AdHoc...")
startTime = DateTime.Now()
Dim arr As String() = RegularExpressions.Regex.Split(mString, "[\n\r]+")
endTime = DateTime.Now()
End Sub
Private Sub DisplayTime(ByVal operationName As String)
Console.WriteLine(operationName & " took " & _
endTime.Subtract(startTime).TotalMilliseconds.ToString & " milliseconds.")
End Sub
End Module
...and here's the output...
========== DoFunction() ==========
Entering DoFunction()...
DoFunction() took 4947.1136 milliseconds.
Entering DoFunction()...
DoFunction() took 4927.0848 milliseconds.
Entering DoFunction()...
DoFunction() took 4927.0848 milliseconds.
========== DoMethod() ==========
Entering DoMethod()...
DoMethod() took 50.072 milliseconds.
Entering DoMethod()...
DoMethod() took 40.0576 milliseconds.
Entering DoMethod()...
DoMethod() took 60.0864 milliseconds.
========== DoRegex_Compiled() ==========
Entering DoRegex_Compiled...
DoRegex_Compiled() took 460.6624 milliseconds.
Entering DoRegex_Compiled...
DoRegex_Compiled() took 440.6336 milliseconds.
Entering DoRegex_Compiled...
DoRegex_Compiled() took 480.6912 milliseconds.
========== DoRegex_AdHoc() ==========
Entering DoRegex_AdHoc...
DoRegex_AdHoc() took 981.4112 milliseconds.
Entering DoRegex_AdHoc...
DoRegex_AdHoc() took 1051.512 milliseconds.
Entering DoRegex_AdHoc...
DoRegex_AdHoc() took 971.3968 milliseconds.