forked from ohler55/oj
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathperf_file.rb
executable file
·64 lines (51 loc) · 1.84 KB
/
perf_file.rb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
#!/usr/bin/env ruby -wW1
$: << '.'
$: << '../lib'
$: << '../ext'
if __FILE__ == $0
if (i = ARGV.index('-I'))
x,path = ARGV.slice!(i, 2)
$: << path
end
end
require 'optparse'
require 'oj'
require 'perf'
$indent = 0
$iter = 1
$size = 1
opts = OptionParser.new
opts.on("-r", "read") { do_read = true }
opts.on("-c", "--count [Int]", Integer, "iterations") { |i| $iter = i }
opts.on("-i", "--indent [Int]", Integer, "indent") { |i| $indent = i }
opts.on("-s", "--size [Int]", Integer, "size in Mbytes") { |s| $size = s }
opts.on("-h", "--help", "Show this display") { puts opts; Process.exit!(0) }
files = opts.parse(ARGV)
$obj = {
'a' => 'Alpha', # string
'b' => true, # boolean
'c' => 12345, # number
'd' => [ true, [false, [-123456789, nil], 3.9676, ['Something else.', false], nil]], # mix it up array
'e' => { 'zero' => nil, 'one' => 1, 'two' => 2, 'three' => [3], 'four' => [0, 1, 2, 3, 4] }, # hash
'f' => nil, # nil
'g' => 12345678901234567890123456789, #_bignum
'h' => { 'a' => { 'b' => { 'c' => { 'd' => {'e' => { 'f' => { 'g' => nil }}}}}}}, # deep hash, not that deep
'i' => [[[[[[[nil]]]]]]] # deep array, again, not that deep
}
json = Oj.dump($obj, :indent => $indent)
cnt = ($size * 1024 * 1024 + json.size) / json.size
cnt = 1 if 0 == $size
filename = 'tmp.json'
File.open(filename, "w") { |f|
cnt.times do
Oj.to_stream(f, $obj, :indent => $indent)
end
}
Oj.default_options = { :mode => :strict, :indent => $indent }
puts '-' * 80
puts "Read from #{cnt * json.size / (1024 * 1024)} Mb file Performance"
perf = Perf.new()
perf.add('Oj.load_file', '') { Oj.load_file(filename) }
perf.add('Oj.load(string)', '') { Oj.load(File.read(filename)) }
perf.add('Oj.load(file)', '') { File.open(filename, 'r') { |f| Oj.load(f) } }
perf.run($iter)