Small test code:
Code:
EnableExplicit
RandomSeed(12345)
#max = 20000
Procedure.s getrandomstring(): Protected output$, i
output$ = ""
For i = 50 To Random(500, 100)
output$ + Chr(Random(126,32))
Next i
ProcedureReturn output$
EndProcedure
Structure xx
string.s
float.d
EndStructure
Structure test
Array myarray.xx(#max)
List mylist.xx()
Map mymap.xx()
EndStructure
Define tree.test, i, t0, xs, xl, js, jl, msg$
; Fill the structure with random values
For i = 0 To #max
tree\myarray(i)\float = Random(100000) / #PI
tree\myarray(i)\string = getrandomstring()
AddElement(tree\mylist())
tree\mylist()\float = Random(100000) / #PI
tree\mylist()\string = getrandomstring()
AddMapElement(tree\mymap(), Str(i))
tree\mymap()\float = Random(100000) / #PI
tree\mymap()\string = getrandomstring()
Next i
; Save XML
CreateXML(0)
t0 = ElapsedMilliseconds()
InsertXMLStructure(RootXMLNode(0), tree, test)
SaveXML(0, "test.xml")
xs = ElapsedMilliseconds() - t0
FreeXML(0)
; Load XML
CreateXML(0)
t0 = ElapsedMilliseconds()
LoadXML(0, "test.xml")
ExtractXMLStructure(MainXMLNode(0), tree, test)
xl = ElapsedMilliseconds() - t0
FreeXML(0)
; Save JSON
CreateJSON(0)
t0 = ElapsedMilliseconds()
InsertJSONStructure(JSONValue(0), tree, test)
SaveJSON(0, "test.json")
js = ElapsedMilliseconds() - t0
FreeJSON(0)
; Load JSON
CreateJSON(0)
t0 = ElapsedMilliseconds()
LoadJSON(0, "test.json")
ExtractJSONStructure(JSONValue(0), tree, test)
jl = ElapsedMilliseconds() - t0
FreeJSON(0)
msg$ + "Save XML: " + Str(xs) + #LF$
msg$ + "Save JSON: " + Str(js) + #LF$
msg$ + #LF$
msg$ + "Load XML: " + Str(xl) + #LF$
msg$ + "Load JSON: " + Str(jl) + #LF$
MessageRequester("X", msg$)
SetClipboardText(msg$)
my results (smallest values after 3 turns):
Save XML: 255 (~ 9,1 MB written data)
Save JSON: 294 (~ 6,7 MB only, but slower)
Load XML: 353 (~ 9,1 MB read data)
Load JSON: 433 (~ 6,7 MB only, but slower)