Platforms to show: All Mac Windows Linux Cross-Platform

/DataTypes/Benchmark Dictionary


Required plugins for this example: MBS DataTypes Plugin

You find this example project in your Plugins Download as a Xojo project file within the examples folder: /DataTypes/Benchmark Dictionary

This example is the version from Mon, 5th May 2019.

Project "Benchmark Dictionary.xojo_binary_project"
Class App Inherits Application
Const kEditClear = "&Delete"
Const kFileQuit = "&Quit"
Const kFileQuitShortcut = ""
End Class
Class Window1 Inherits Window
Const kCreateCount = 10000
Const kFillCount = 10000
Const kQueryCount = 10000
Control List Inherits Listbox
ControlInstance List Inherits Listbox
EventHandler Function CompareRows(row1 as Integer, row2 as Integer, column as Integer, ByRef result as Integer) As Boolean if column > 0 then dim v1 as Double = val(me.Cell(row1, column)) dim v2 as Double = val(me.Cell(row2, column)) result = v1-v2 Return true end if End EventHandler
End Control
EventHandler Sub Open() BuildKeyArray TestXojoDictionaryIntegerToInteger TestRealDictionaryIntegerToInteger TestPlugDictionaryIntegerToInteger TestXojoDictionaryStringToString TestRealDictionaryStringToString TestPlugDictionaryStringToString true TestPlugDictionaryStringToString false TestXojoDictionaryTextToText TestRealDictionaryTextToText End EventHandler
Sub BuildKeyArray() dim u as integer = kQueryCount * 2 + 2 for i as integer = 0 to u keys.Append str(i) next #if RBVersion >= 2014 then dim keyt() as text = self.keyt for i as integer = 0 to u keyt.Append i.ToText next #endif End Sub
Sub TestPlugDictionaryIntegerToInteger() #Pragma DisableBackgroundTasks dim d as IntegerToIntegerHashMapMBS dim m1 as Double = Microseconds // create for i as integer = 1 to kCreateCount d = new IntegerToIntegerHashMapMBS next dim m2 as Double = Microseconds // fill for i as integer = 1 to kFillCount d.Value(i) = i+1 next dim m3 as Double = Microseconds // fill a full one for i as integer = 1 to kFillCount d.Value(i+1) = i-1 next dim m4 as Double = Microseconds // query for i as integer = 1 to kQueryCount dim n as integer = d.Value(i) next dim m5 as Double = Microseconds // query for i as integer = 1 to kQueryCount dim n as integer = d.lookup(i*2, 0) // half will fail next dim m6 as Double = Microseconds List.AddRow "MBS Dictionary Integer to Integer", strm(m2-m1), strm(m3-m2), strm(m4-m3), strm(m5-m4), strm(m6-m5) End Sub
Sub TestPlugDictionaryStringToString(CaseSensitive as Boolean) #Pragma DisableBackgroundTasks dim d as StringToStringHashMapMBS dim m1 as Double = Microseconds // create for i as integer = 1 to kCreateCount d = new StringToStringHashMapMBS(CaseSensitive) next dim m2 as Double = Microseconds // fill for i as integer = 1 to kFillCount d.Value(keys(i)) = keys(i+1) next dim m3 as Double = Microseconds // fill a full one for i as integer = 1 to kFillCount d.Value(keys(i+1)) = keys(i-1) next dim m4 as Double = Microseconds // query for i as integer = 1 to kQueryCount dim n as string = d.Value(keys(i)) next dim m5 as Double = Microseconds // query for i as integer = 1 to kQueryCount dim n as string = d.lookup(keys(i*2), "Hello") // half will fail next dim m6 as Double = Microseconds dim postfix as string if CaseSensitive then postfix = " Case Sensitive" end if List.AddRow "MBS Dictionary String to String"+postfix, strm(m2-m1), strm(m3-m2), strm(m4-m3), strm(m5-m4), strm(m6-m5) End Sub
Sub TestRealDictionaryIntegerToInteger() #Pragma DisableBackgroundTasks dim d as Dictionary dim m1 as Double = Microseconds // create for i as integer = 1 to kCreateCount d = new Dictionary next dim m2 as Double = Microseconds // fill for i as integer = 1 to kFillCount d.Value(i) = i+1 next dim m3 as Double = Microseconds // fill a full one for i as integer = 1 to kFillCount d.Value(i+1) = i-1 next dim m4 as Double = Microseconds // query for i as integer = 1 to kQueryCount dim n as integer = d.Value(i) next dim m5 as Double = Microseconds // query for i as integer = 1 to kQueryCount dim n as integer = d.lookup(i*2, 0) // half will fail next dim m6 as Double = Microseconds List.AddRow "Old Dictionary Integer to Integer", strm(m2-m1), strm(m3-m2), strm(m4-m3), strm(m5-m4), strm(m6-m5) End Sub
Sub TestRealDictionaryStringToString() #Pragma DisableBackgroundTasks dim d as Dictionary dim m1 as Double = Microseconds // create for i as integer = 1 to kCreateCount d = new Dictionary next dim m2 as Double = Microseconds // fill for i as integer = 1 to kFillCount d.Value(keys(i)) = keys(i+1) next dim m3 as Double = Microseconds // fill a full one for i as integer = 1 to kFillCount d.Value(keys(i+1)) = keys(i-1) next dim m4 as Double = Microseconds // query for i as integer = 1 to kQueryCount dim n as string = d.Value(keys(i)) next dim m5 as Double = Microseconds // query for i as integer = 1 to kQueryCount dim n as string = d.lookup(keys(i*2), "Hello") // half will fail next dim m6 as Double = Microseconds List.AddRow "Old Dictionary String to String", strm(m2-m1), strm(m3-m2), strm(m4-m3), strm(m5-m4), strm(m6-m5) End Sub
Sub TestRealDictionaryTextToText() #if RBVersion >= 2014 then dim keyt() as text = self.keyt #Pragma DisableBackgroundTasks dim d as Dictionary dim m1 as Double = Microseconds // create for i as integer = 1 to kCreateCount d = new Dictionary next dim m2 as Double = Microseconds // fill for i as integer = 1 to kFillCount d.Value(keyt(i)) = keyt(i+1) next dim m3 as Double = Microseconds // fill a full one for i as integer = 1 to kFillCount d.Value(keyt(i+1)) = keyt(i-1) next dim m4 as Double = Microseconds // query for i as integer = 1 to kQueryCount dim n as text = d.Value(keyt(i)) next dim m5 as Double = Microseconds // query dim DefaultText as text = "Hello" for i as integer = 1 to kQueryCount dim n as text = d.lookup(keyt(i*2), defaultText) // half will fail next dim m6 as Double = Microseconds List.AddRow "Old Dictionary Text to Text", strm(m2-m1), strm(m3-m2), strm(m4-m3), strm(m5-m4), strm(m6-m5) #endif End Sub
Sub TestXojoDictionaryIntegerToInteger() #if RBVersion >= 2014 then #Pragma DisableBackgroundTasks dim d as xojo.core.Dictionary dim m1 as Double = Microseconds // create for i as integer = 1 to kCreateCount d = new xojo.core.Dictionary next dim m2 as Double = Microseconds // fill for i as integer = 1 to kFillCount d.Value(i) = i+1 next dim m3 as Double = Microseconds // fill a full one for i as integer = 1 to kFillCount d.Value(i+1) = i-1 next dim m4 as Double = Microseconds // query for i as integer = 1 to kQueryCount dim n as integer = d.Value(i) next dim m5 as Double = Microseconds // query for i as integer = 1 to kQueryCount dim n as integer = d.lookup(i*2, 0) // half will fail next dim m6 as Double = Microseconds List.AddRow "New Dictionary Integer to Integer", strm(m2-m1), strm(m3-m2), strm(m4-m3), strm(m5-m4), strm(m6-m5) #endif End Sub
Sub TestXojoDictionaryStringToString() #if RBVersion >= 2014 then #Pragma DisableBackgroundTasks dim d as xojo.Core.Dictionary dim m1 as Double = Microseconds // create for i as integer = 1 to kCreateCount d = new xojo.Core.Dictionary next dim m2 as Double = Microseconds // fill for i as integer = 1 to kFillCount d.Value(keys(i)) = keys(i+1) next dim m3 as Double = Microseconds // fill a full one for i as integer = 1 to kFillCount d.Value(keys(i+1)) = keys(i-1) next dim m4 as Double = Microseconds // query for i as integer = 1 to kQueryCount dim n as string = d.Value(keys(i)) next dim m5 as Double = Microseconds // query for i as integer = 1 to kQueryCount dim n as string = d.lookup(keys(i*2), "Hello") // half will fail next dim m6 as Double = Microseconds List.AddRow "New Dictionary String to String", strm(m2-m1), strm(m3-m2), strm(m4-m3), strm(m5-m4), strm(m6-m5) #endif End Sub
Sub TestXojoDictionaryTextToText() #if RBVersion >= 2014 then dim keyt() as text = self.keyt #Pragma DisableBackgroundTasks dim d as xojo.Core.Dictionary dim m1 as Double = Microseconds // create for i as integer = 1 to kCreateCount d = new xojo.Core.Dictionary next dim m2 as Double = Microseconds // fill for i as integer = 1 to kFillCount d.Value(keyt(i)) = keyt(i+1) next dim m3 as Double = Microseconds // fill a full one for i as integer = 1 to kFillCount d.Value(keyt(i+1)) = keyt(i-1) next dim m4 as Double = Microseconds // query for i as integer = 1 to kQueryCount dim n as text = d.Value(keyt(i)) next dim m5 as Double = Microseconds // query dim DefaultText as text = "Hello" for i as integer = 1 to kQueryCount dim n as text = d.lookup(keyt(i*2), DefaultText) // half will fail next dim m6 as Double = Microseconds List.AddRow "New Dictionary Text to Text", strm(m2-m1), strm(m3-m2), strm(m4-m3), strm(m5-m4), strm(m6-m5) #endif End Sub
Function strm(d as Double) As string Return str(d / 1000.0, "0.000")+"ms" End Function
Property Keys() As string
Property keyt As Variant
End Class
MenuBar MainMenuBar
MenuItem FileMenu = "&File"
MenuItem FileQuit = "#App.kFileQuit"
MenuItem EditMenu = "&Edit"
MenuItem EditUndo = "&Undo"
MenuItem EditSeparator1 = "-"
MenuItem EditCut = "Cu&t"
MenuItem EditCopy = "&Copy"
MenuItem EditPaste = "&Paste"
MenuItem EditClear = "#App.kEditClear"
MenuItem EditSeparator2 = "-"
MenuItem EditSelectAll = "Select &All"
End MenuBar
End Project

The items on this page are in the following plugins: MBS DataTypes Plugin.


The biggest plugin in space...