@@ -20,90 +20,32 @@ file = joinpath(@__DIR__, "nasa.xml")
20
20
21
21
df = DataFrame (kind= String[], name= String[], bench= BenchmarkTools. Trial[])
22
22
23
+ macro add_benchmark (kind, name, expr... )
24
+ esc (:(let
25
+ @info string ($ kind, " - " , $ name)
26
+ bench = @benchmark $ (expr... )
27
+ push! (df, (; kind= $ kind, name= $ name, bench))
28
+ end ))
29
+ end
23
30
24
31
# -----------------------------------------------------------------------------# Write
25
- kind = " Write"
26
- output = tempname ()
27
-
28
- name = " XML.write 2"
29
- @info name
30
- node1 = read (file, Node)
31
- bench = @benchmark XML. write ($ output, $ node1)
32
- push! (df, (;kind, name, bench))
33
-
34
-
35
- name = " EzXML.writexml"
36
- @info name
37
- node2 = EzXML. readxml (file)
38
- bench = @benchmark EzXML. write ($ output, $ node2)
39
- push! (df, (;kind, name, bench))
40
-
41
-
32
+ @add_benchmark " Write" " XML.write" XML. write ($ (tempname ()), o) setup = (o = read (file, Node))
33
+ @add_benchmark " Write" " EzXML.writexml" EzXML. write ($ (tempname ()), o) setup = (o = EzXML. readxml (file))
42
34
43
35
# -----------------------------------------------------------------------------# Read
44
- kind = " Read"
45
-
46
- # name = "XML.Raw"
47
- # @info name
48
- # bench = @benchmark read($file, XML.Raw)
49
- # push!(df, (;kind, name, bench))
50
-
51
-
52
- name = " XML.LazyNode"
53
- @info name
54
- bench = @benchmark read ($ file, LazyNode)
55
- push! (df, (;kind, name, bench))
56
-
57
- name = " XML.Node"
58
- @info name
59
- bench = @benchmark read ($ file, Node)
60
- push! (df, (;kind, name, bench))
61
-
62
-
63
- name = " EzXML.readxml"
64
- @info name
65
- bench = @benchmark EzXML. readxml ($ file)
66
- push! (df, (;kind, name, bench))
67
-
68
-
69
- name = " XMLDict.xml_dict"
70
- @info name
71
- bench = @benchmark XMLDict. xml_dict (read ($ file, String))
72
- push! (df, (;kind, name, bench))
73
-
36
+ @add_benchmark " Read" " XML.LazyNode" read ($ file, LazyNode)
37
+ @add_benchmark " Read" " XML.Node" read ($ file, Node)
38
+ @add_benchmark " Read" " EzXML.readxml" EzXML. readxml ($ file)
39
+ @add_benchmark " Read" " XMLDict.xml_dict" XMLDict. xml_dict (read ($ file, String))
74
40
75
41
# -----------------------------------------------------------------------------# Lazy Iteration
76
- kind = " Lazy Iteration"
77
-
78
- name = " for x in read(file, LazyNode); end"
79
- @info name
80
- bench = @benchmark (for x in read ($ file, LazyNode); end )
81
- push! (df, (;kind, name, bench))
82
-
83
-
84
- name = " for x in open(EzXML.StreamReader, file); end"
85
- @info name
86
- bench = @benchmark (reader = open (EzXML. StreamReader, $ file); for x in reader; end ; close (reader))
87
- push! (df, (;kind, name, bench))
88
-
42
+ @add_benchmark " Lazy Iteration" " LazyNode" for x in read ($ file, LazyNode); end
43
+ @add_benchmark " Lazy Iteration" " EzXML.StreamReader" (reader = open (EzXML. StreamReader, $ file); for x in reader; end ; close (reader))
89
44
90
45
# -----------------------------------------------------------------------------# Lazy Iteration: Collect Tags
91
- kind = " Collect Tags"
92
-
93
- name = " via XML.LazyNode"
94
- @info name
95
- bench = @benchmark [tag (x) for x in o] setup= (o = read (file, LazyNode))
96
- push! (df, (;kind, name, bench))
46
+ @add_benchmark " Collect Tags" " LazyNode" [tag (x) for x in o] setup = (o = read (file, LazyNode))
47
+ @add_benchmark " Collect Tags" " EzXML.StreamReader" [r. name for x in r if x == EzXML. READER_ELEMENT] setup= (r= open (EzXML. StreamReader, file)) teardown= (close (r))
97
48
98
-
99
- name = " via EzXML.StreamReader"
100
- @info name
101
- bench = @benchmark [r. name for x in r if x == EzXML. READER_ELEMENT] setup= (r= open (EzXML. StreamReader, file)) teardown= (close (r))
102
- push! (df, (;kind, name, bench))
103
-
104
-
105
- name = " via EzXML.readxml"
106
- @info name
107
49
function get_tags (o:: EzXML.Node )
108
50
out = String[]
109
51
for node in EzXML. eachelement (o)
@@ -114,18 +56,14 @@ function get_tags(o::EzXML.Node)
114
56
end
115
57
out
116
58
end
117
- bench = @benchmark get_tags (o. root) setup= (o = EzXML. readxml (file))
118
- push! (df, (;kind, name, bench))
119
-
120
-
121
-
59
+ @add_benchmark " Collect Tags" " EzXML.readxml" get_tags (o. root) setup= (o = EzXML. readxml (file))
122
60
123
61
124
62
# -----------------------------------------------------------------------------# Plots
125
63
function plot (df, kind)
126
64
g = groupby (df, :kind )
127
65
sub = g[(;kind)]
128
- x = map (row -> " $(row. kind) : $(row . name)" , eachrow (sub))
66
+ x = map (row -> " $(row. name) " , eachrow (sub))
129
67
y = map (x -> median (x). time / 1000 ^ 2 , sub. bench)
130
68
display (barplot (x, y, title = " $kind Time (ms)" , border= :none , width= 50 ))
131
69
end
0 commit comments