Skip to content

Commit edff910

Browse files
committed
Reuse the unpackers and freeze the payload
Saves a few allocations. Mostly helps on smaller payloads, as the cost of building the unpacker is quite high.
1 parent ed72e7f commit edff910

1 file changed

Lines changed: 19 additions & 2 deletions

File tree

bench/various_appraches_bench.rb

Lines changed: 19 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -340,7 +340,24 @@ def self.description
340340
end
341341
end
342342

343-
module PlainRubyNaiveAlloc
343+
module PlainRubyPooled
344+
class PooledFactory
345+
def initialize(factory)
346+
@packer = factory.packer
347+
@unpacker = factory.unpacker
348+
end
349+
350+
def load(data)
351+
@unpacker.feed(data)
352+
@unpacker.full_unpack
353+
end
354+
355+
def dump(obj)
356+
@packer.write(obj)
357+
@packer.full_pack.freeze
358+
end
359+
end
360+
344361
def self.build_factory
345362
factory = MessagePack::Factory.new
346363
Coders.register_time(factory)
@@ -361,7 +378,7 @@ def self.build_factory
361378
end
362379

363380
def self.factory
364-
@factory ||= build_factory
381+
@factory ||= PooledFactory.new(build_factory)
365382
end
366383

367384
def self.description

0 commit comments

Comments
 (0)