Platforms to show: All Mac Windows Linux Cross-Platform
Required plugins for this example: MBS XML Plugin
You find this example project in your Plugins Download as a Xojo project file within the examples folder: /XML/XML Benchmark
This example is the version from Wed, 23th Aug 2022.
Project "XML Benchmark.xojo_binary_project"
Class App Inherits DesktopApplication
Const kEditClear = "&Delete"
Const kFileQuit = "&Quit"
Const kFileQuitShortcut = ""
End Class
Class MainWindow Inherits DesktopWindow
Control List Inherits DesktopListBox
ControlInstance List Inherits DesktopListBox
End Control
EventHandler Sub Opening()
Dim file As FolderItem = SpecialFolder.Desktop.Child("test.xml")
If Not file.Exists Then
MessageBox "Please put test.xml on the desktop."
Return
End If
Dim Bin As BinaryStream = BinaryStream.Open(file)
Dim data As String = Bin.Read(Bin.Length, encodings.UTF8)
list.AddRow "Size of XML file: " + data.Bytes.ToString
Dim t1 As Double = Microseconds
Dim xdoc As New XmlDocument(data)
Dim t2 As Double = Microseconds
Dim mdoc As New XMLDocumentMBS(data)
Dim t3 As Double = Microseconds
list.AddRow "XmlDocument parse: " + Str( (t2-t1) / 1000.0, "0.0") + " ms"
list.AddRow "XMLDocumentMBS parse: " + Str( (t3-t2) / 1000.0, "0.0") + " ms"
Dim xnodes() As XmlNode
Dim mnodes() As XMLElementMBS
t1 = Microseconds
FindNodes mdoc, "exports", mnodes
t2 = Microseconds
FindNodes xdoc, "exports", xnodes
t3 = Microseconds
list.AddRow "FindNodes MBS: " + Str( (t2-t1) / 1000.0, "0.0") + " ms for "+mnodes.Count.toString+" elements"
list.AddRow "FindNodes Xojo: " + Str( (t3-t2) / 1000.0, "0.0") + " ms for "+xnodes.Count.toString+" elements"
Redim xnodes(-1)
Redim mnodes(-1)
// second run with some caching
t1 = Microseconds
FindNodes mdoc, "exports", mnodes
t2 = Microseconds
FindNodes xdoc, "exports", xnodes
t3 = Microseconds
list.AddRow "FindNodes MBS: " + Str( (t2-t1) / 1000.0, "0.0") + " ms for "+mnodes.Count.toString+" elements"
list.AddRow "FindNodes Xojo: " + Str( (t3-t2) / 1000.0, "0.0") + " ms for "+xnodes.Count.toString+" elements"
Redim xnodes(-1)
Redim mnodes(-1)
t1 = Microseconds
mnodes = mdoc.ElementsByTagName("exports")
t2 = Microseconds
list.AddRow "ElementsByTagName MBS: " + Str( (t2-t1) / 1000.0, "0.0") + " ms for "+mnodes.Count.toString+" elements"
Redim xnodes(-1)
Redim mnodes(-1)
t1 = Microseconds
Dim nodes() As XMLNodeMBS
Dim WhatToShow As Integer = mdoc.ShowElement
Dim walker As XMLNodeIteratorMBS = mdoc.createNodeIterator(Nil, WhatToShow)
Dim node As XmlNodeMBS = walker.Current
While node <> Nil
If node.LocalName = "exports" Then
nodes.Add node
End If
node = walker.nextNode
Wend
t2 = Microseconds
list.AddRow "XMLNodeIteratorMBS: " + Str( (t2-t1) / 1000.0, "0.0") + " ms for "+nodes.Count.toString+" elements"
End EventHandler
Sub FindNodes(element as XMLElementMBS, NodeName as string, nodes() as XmlElementMBS)
#Pragma DisableBackgroundTasks
While element <> Nil
// match this
If element.LocalName = NodeName Then
nodes.Add element
End If
// recursion to look into sub elements
Dim c As XmlElementMBS = element.FirstElementChild
If c <> Nil Then
FindNodes c, NodeName, nodes
End If
element = element.NextElementSibling
Wend
End Sub
Sub FindNodes(doc as XmlDocument, NodeName as string, nodes() as XmlElement)
#Pragma DisableBackgroundTasks
FindNodes doc.FirstChild, NodeName, nodes
End Sub
Sub FindNodes(doc as XmlDocumentMBS, NodeName as string, nodes() as XmlElementMBS)
#Pragma DisableBackgroundTasks
Dim v As Variant = doc.FirstChild
Dim n As XMLElementMBS = v
FindNodes n, NodeName, nodes
End Sub
Sub FindNodes(element as XmlNode, NodeName as string, nodes() as XmlNode)
#Pragma DisableBackgroundTasks
While element <> Nil
// match this
If element.LocalName = NodeName Then
nodes.Add element
End If
// recursion to look into sub elements
Dim c As XmlNode = element.FirstChild
If c <> Nil Then
FindNodes c, NodeName, nodes
End If
element = element.NextSibling
Wend
End Sub
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"
MenuItem HelpMenu = "&Help"
End MenuBar
End Project
See also:
The items on this page are in the following plugins: MBS XML Plugin.