Imports System
Imports System.Diagnostics
Imports System.Collections.Generic
Public Class Test
Public Shared Sub Main()
Dim abHeader As Byte() = New Byte() {255, 127, 0, 0}
Dim Format As String = "{0,-24}: {1}" & Environment.NewLine & "{2,-24}: {3}"
Dim sw As New Stopwatch
Dim r As New Random
sw.Restart()
Dim Result1 As Long = Method1(abHeader)
sw.Stop()
Dim Time1 As TimeSpan = sw.Elapsed
'sw.Restart()
'Dim Result2 As Long = Method2(abHeader)
'sw.Stop()
'Dim Time2 As TimeSpan = sw.Elapsed
sw.Restart()
Dim Result3 As Long = Method3(abHeader)
sw.Stop()
Dim Time3 As TimeSpan = sw.Elapsed
Console.WriteLine(Format, "Bitwise Or", Result1, "Compile time", Time1)
Dim ExecutionTimes1 As New List(Of Long)
For x As Integer = 1 To 1000000
abHeader = New Byte(0 To 3) {r.Next(0, 255), r.Next(0, 255), r.Next(0, 255), r.Next(0, 255)}
sw.Restart()
Dim Result As Long = Method1(abHeader)
sw.Stop()
ExecutionTimes1.Add(sw.Elapsed.Ticks)
Next
Console.WriteLine("{0,-24}: {1}", "1M iterations avg.", TimeSpan.FromTicks(GetAverage(ExecutionTimes1)))
Console.WriteLine()
Console.WriteLine(Format, "Convert.ToInt64()", "<CAST ERROR>", "Compile time", "???")
Console.WriteLine()
Console.WriteLine(Format, "BitConverter.ToInt32()", Result3, "Compile time", Time3)
Dim ExecutionTimes3 As New List(Of Long)
For x As Integer = 1 To 1000000
abHeader = New Byte(0 To 3) {r.Next(0, 255), r.Next(0, 255), r.Next(0, 255), r.Next(0, 255)}
sw.Restart()
Dim Result As Long = Method3(abHeader)
sw.Stop()
ExecutionTimes3.Add(sw.Elapsed.Ticks)
Next
Console.WriteLine("{0,-24}: {1}", "1M iterations avg.", TimeSpan.FromTicks(GetAverage(ExecutionTimes3)))
End Sub
Public Shared Function Method1(ByVal Array As Byte()) As Long
'NOTE: Indexes reversed due to different compiler endianness.'
Return (CLng(Array(3)) << 24) Or (CLng(Array(2)) << 16) Or (CLng(Array(1)) << 8) Or (CLng(Array(0)))
End Function
Public Shared Function Method2(ByVal Array As Byte()) As Long
Return Convert.ToInt64(Array)
End Function
Public Shared Function Method3(ByVal Array As Byte()) As Long
Return CLng(BitConverter.ToInt32(Array, 0))
End Function
Public Shared Function GetAverage(ByVal List As List(Of Long)) As Long
Dim ReturnValue As Long = 0
For Each Value As Long In List
ReturnValue += Value
Next
Return ReturnValue / List.Count
End Function
End Class
SW1wb3J0cyBTeXN0ZW0KSW1wb3J0cyBTeXN0ZW0uRGlhZ25vc3RpY3MKSW1wb3J0cyBTeXN0ZW0uQ29sbGVjdGlvbnMuR2VuZXJpYwoKUHVibGljIENsYXNzIFRlc3QKICAgIFB1YmxpYyBTaGFyZWQgU3ViIE1haW4oKQogICAgICAgIERpbSBhYkhlYWRlciBBcyBCeXRlKCkgPSBOZXcgQnl0ZSgpIHsyNTUsIDEyNywgMCwgMH0KICAgICAgICBEaW0gRm9ybWF0IEFzIFN0cmluZyA9ICJ7MCwtMjR9OiB7MX0iICYgRW52aXJvbm1lbnQuTmV3TGluZSAmICJ7MiwtMjR9OiB7M30iCiAgICAgICAgRGltIHN3IEFzIE5ldyBTdG9wd2F0Y2gKICAgICAgICBEaW0gciBBcyBOZXcgUmFuZG9tCgogICAgICAgIHN3LlJlc3RhcnQoKQogICAgICAgIERpbSBSZXN1bHQxIEFzIExvbmcgPSBNZXRob2QxKGFiSGVhZGVyKQogICAgICAgIHN3LlN0b3AoKQogICAgICAgIERpbSBUaW1lMSBBcyBUaW1lU3BhbiA9IHN3LkVsYXBzZWQKCiAgICAgICAgJ3N3LlJlc3RhcnQoKQogICAgICAgICdEaW0gUmVzdWx0MiBBcyBMb25nID0gTWV0aG9kMihhYkhlYWRlcikKICAgICAgICAnc3cuU3RvcCgpCiAgICAgICAgJ0RpbSBUaW1lMiBBcyBUaW1lU3BhbiA9IHN3LkVsYXBzZWQKCiAgICAgICAgc3cuUmVzdGFydCgpCiAgICAgICAgRGltIFJlc3VsdDMgQXMgTG9uZyA9IE1ldGhvZDMoYWJIZWFkZXIpCiAgICAgICAgc3cuU3RvcCgpCiAgICAgICAgRGltIFRpbWUzIEFzIFRpbWVTcGFuID0gc3cuRWxhcHNlZAoKICAgICAgICBDb25zb2xlLldyaXRlTGluZShGb3JtYXQsICJCaXR3aXNlIE9yIiwgUmVzdWx0MSwgIkNvbXBpbGUgdGltZSIsIFRpbWUxKQoKICAgICAgICBEaW0gRXhlY3V0aW9uVGltZXMxIEFzIE5ldyBMaXN0KE9mIExvbmcpCiAgICAgICAgRm9yIHggQXMgSW50ZWdlciA9IDEgVG8gMTAwMDAwMAogICAgICAgICAgICBhYkhlYWRlciA9IE5ldyBCeXRlKDAgVG8gMykge3IuTmV4dCgwLCAyNTUpLCByLk5leHQoMCwgMjU1KSwgci5OZXh0KDAsIDI1NSksIHIuTmV4dCgwLCAyNTUpfQogICAgICAgICAgICBzdy5SZXN0YXJ0KCkKICAgICAgICAgICAgRGltIFJlc3VsdCBBcyBMb25nID0gTWV0aG9kMShhYkhlYWRlcikKICAgICAgICAgICAgc3cuU3RvcCgpCiAgICAgICAgICAgIEV4ZWN1dGlvblRpbWVzMS5BZGQoc3cuRWxhcHNlZC5UaWNrcykKICAgICAgICBOZXh0CiAgICAgICAgQ29uc29sZS5Xcml0ZUxpbmUoInswLC0yNH06IHsxfSIsICIxTSBpdGVyYXRpb25zIGF2Zy4iLCBUaW1lU3Bhbi5Gcm9tVGlja3MoR2V0QXZlcmFnZShFeGVjdXRpb25UaW1lczEpKSkKICAgICAgICBDb25zb2xlLldyaXRlTGluZSgpCgogICAgICAgIENvbnNvbGUuV3JpdGVMaW5lKEZvcm1hdCwgIkNvbnZlcnQuVG9JbnQ2NCgpIiwgIjxDQVNUIEVSUk9SPiIsICJDb21waWxlIHRpbWUiLCAiPz8/IikKICAgICAgICBDb25zb2xlLldyaXRlTGluZSgpCgogICAgICAgIENvbnNvbGUuV3JpdGVMaW5lKEZvcm1hdCwgIkJpdENvbnZlcnRlci5Ub0ludDMyKCkiLCBSZXN1bHQzLCAiQ29tcGlsZSB0aW1lIiwgVGltZTMpCiAgICAgICAgCiAgICAgICAgRGltIEV4ZWN1dGlvblRpbWVzMyBBcyBOZXcgTGlzdChPZiBMb25nKQogICAgICAgIEZvciB4IEFzIEludGVnZXIgPSAxIFRvIDEwMDAwMDAKICAgICAgICAgICAgYWJIZWFkZXIgPSBOZXcgQnl0ZSgwIFRvIDMpIHtyLk5leHQoMCwgMjU1KSwgci5OZXh0KDAsIDI1NSksIHIuTmV4dCgwLCAyNTUpLCByLk5leHQoMCwgMjU1KX0KICAgICAgICAgICAgc3cuUmVzdGFydCgpCiAgICAgICAgICAgIERpbSBSZXN1bHQgQXMgTG9uZyA9IE1ldGhvZDMoYWJIZWFkZXIpCiAgICAgICAgICAgIHN3LlN0b3AoKQogICAgICAgICAgICBFeGVjdXRpb25UaW1lczMuQWRkKHN3LkVsYXBzZWQuVGlja3MpCiAgICAgICAgTmV4dAogICAgICAgIENvbnNvbGUuV3JpdGVMaW5lKCJ7MCwtMjR9OiB7MX0iLCAiMU0gaXRlcmF0aW9ucyBhdmcuIiwgVGltZVNwYW4uRnJvbVRpY2tzKEdldEF2ZXJhZ2UoRXhlY3V0aW9uVGltZXMzKSkpCiAgICBFbmQgU3ViCgogICAgUHVibGljIFNoYXJlZCBGdW5jdGlvbiBNZXRob2QxKEJ5VmFsIEFycmF5IEFzIEJ5dGUoKSkgQXMgTG9uZwogICAgICAgICdOT1RFOiBJbmRleGVzIHJldmVyc2VkIGR1ZSB0byBkaWZmZXJlbnQgY29tcGlsZXIgZW5kaWFubmVzcy4nCiAgICAgICAgUmV0dXJuIChDTG5nKEFycmF5KDMpKSA8PCAyNCkgT3IgKENMbmcoQXJyYXkoMikpIDw8IDE2KSBPciAoQ0xuZyhBcnJheSgxKSkgPDwgOCkgT3IgKENMbmcoQXJyYXkoMCkpKQogICAgRW5kIEZ1bmN0aW9uCgogICAgUHVibGljIFNoYXJlZCBGdW5jdGlvbiBNZXRob2QyKEJ5VmFsIEFycmF5IEFzIEJ5dGUoKSkgQXMgTG9uZwogICAgICAgIFJldHVybiBDb252ZXJ0LlRvSW50NjQoQXJyYXkpCiAgICBFbmQgRnVuY3Rpb24KCiAgICBQdWJsaWMgU2hhcmVkIEZ1bmN0aW9uIE1ldGhvZDMoQnlWYWwgQXJyYXkgQXMgQnl0ZSgpKSBBcyBMb25nCiAgICAgICAgUmV0dXJuIENMbmcoQml0Q29udmVydGVyLlRvSW50MzIoQXJyYXksIDApKQogICAgRW5kIEZ1bmN0aW9uCgogICAgUHVibGljIFNoYXJlZCBGdW5jdGlvbiBHZXRBdmVyYWdlKEJ5VmFsIExpc3QgQXMgTGlzdChPZiBMb25nKSkgQXMgTG9uZwogICAgICAgIERpbSBSZXR1cm5WYWx1ZSBBcyBMb25nID0gMAogICAgICAgIEZvciBFYWNoIFZhbHVlIEFzIExvbmcgSW4gTGlzdAogICAgICAgICAgICBSZXR1cm5WYWx1ZSArPSBWYWx1ZQogICAgICAgIE5leHQKICAgICAgICBSZXR1cm4gUmV0dXJuVmFsdWUgLyBMaXN0LkNvdW50CiAgICBFbmQgRnVuY3Rpb24KRW5kIENsYXNz