File: instantiation.rb

package info (click to toggle)
libneedle-ruby 1.2.0-2
  • links: PTS
  • area: main
  • in suites: sarge
  • size: 1,436 kB
  • ctags: 886
  • sloc: ruby: 4,464; makefile: 52
file content (72 lines) | stat: -rw-r--r-- 1,863 bytes parent folder | download | duplicates (2)
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
64
65
66
67
68
69
70
71
72
$:.unshift "../lib"

require 'benchmark'
require 'needle'

ITERATIONS = 100_000

S = Struct.new( :value )

registry = Needle::Registry.new
registry.register( :immediate, :model=>:prototype ) { S.new }
registry.register( :deferred, :model=>:prototype_deferred ) { S.new }

puts
puts "--------------------------------------------------------------------"
puts "Direct vs. Immediate vs. Deferred instantiation (trivial)"
puts "#{ITERATIONS} iterations"
puts

Benchmark.bm(10) do |x|
  GC.disable
  x.report( "direct:" ) { ITERATIONS.times { S.new } }
  GC.start
  x.report( "immediate:" ) { ITERATIONS.times { registry.immediate } }
  GC.start
  x.report( "deferred:" ) { ITERATIONS.times { registry.deferred } }
  GC.start
  x.report( "deferred*:" ) { ITERATIONS.times { registry.deferred.value } }
  GC.enable
end

puts "* this benchmark forced the proxy to instantiate its wrapped service"
puts

class S2
  def initialize
    @h = Hash.new
    @h[:one] = :two
    @h[:two] = :three
    @h[:three] = :four
    10.times { @h[:one] }
  end

  def value
    @h
  end
end

registry = Needle::Registry.new
registry.register( :immediate, :model=>:prototype ) { S2.new }
registry.register( :deferred, :model=>:prototype_deferred ) { S2.new }

puts
puts "--------------------------------------------------------------------"
puts "Direct vs. Immediate vs. Deferred instantiation (non-trivial)"
puts "#{ITERATIONS} iterations"
puts

Benchmark.bm(10) do |x|
  GC.disable
  x.report( "direct:" ) { ITERATIONS.times { S2.new } }
  GC.start
  x.report( "immediate:" ) { ITERATIONS.times { registry.immediate } }
  GC.start
  x.report( "deferred:" ) { ITERATIONS.times { registry.deferred } }
  GC.start
  x.report( "deferred*:" ) { ITERATIONS.times { registry.deferred.value } }
  GC.enable
end

puts "* this benchmark forced the proxy to instantiate its wrapped service"
puts