Example: /DataTypes/Benchmark Dictionary

Online Documentation   -   Statistics   -   FAQ   -   Plugin Parts (All, Dependencies)   -   Class hierarchy

New in Version 22.2 22.3 22.4 22.5 23.0 23.1 23.2 23.3 23.4 23.5 24.0 24.1

The list of the   topics,   classes,   interfaces,   controls,   modules,   global methods by category,   global methods by name,   screenshots,   licenses   and   examples.

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.


💬 Ask a question or report a problem