From: janmayjuldec-programming@... Date: 2015-01-21T16:15:01+00:00 Subject: [ruby-core:67728] [ruby-trunk - Bug #10761] Marshal.dump 100% slower in 2.2.0 vs 2.1.5 Issue #10761 has been updated by David Jenkins. Final repro, no data files, all code: ~~~ require 'benchmark' class ToBeMarshaled def initialize n @a = [] n.times do |i| @a << i.to_f end end end tbm = ToBeMarshaled.new(10000) n = 100 Benchmark.bm do |x| x.report("Marshal Dump") {for i in 1..n; Marshal.dump(tbm); end} end ~~~ results (ran benchmark 3 times for each Ruby version): 2.1.5 user system total real Marshal Dump 0.640000 0.010000 0.650000 ( 0.744080) Marshal Dump 0.670000 0.000000 0.670000 ( 0.758597) Marshal Dump 0.650000 0.020000 0.670000 ( 0.747583) 2.2.0 user system total real Marshal Dump 25.070000 0.220000 25.290000 ( 27.980023) Marshal Dump 24.100000 0.160000 24.260000 ( 26.633049) Marshal Dump 24.440000 0.230000 24.670000 ( 27.540826) ~35 times slower ---------------------------------------- Bug #10761: Marshal.dump 100% slower in 2.2.0 vs 2.1.5 https://bugs.ruby-lang.org/issues/10761#change-51158 * Author: David Jenkins * Status: Open * Priority: High * Assignee: * ruby -v: 2.2.0 * Backport: 2.0.0: UNKNOWN, 2.1: UNKNOWN, 2.2: UNKNOWN ---------------------------------------- Calling Marshal.dump on a complex (nested) object 100 times shows the following: 2.1.5 user system total real Marshal Dump 24.350000 0.250000 24.600000 ( 29.330294) 2.2.0 user system total real Marshal Dump 50.450000 0.140000 50.590000 ( 52.268773) To reproduce, put marshal_slow.rb and nested_ds.txt in same directory and run marshal_slow.rb. I found that Marshal.dump only shows this kind of discrepancy on deeply nested objects. The nested_ds.txt file is a dump of an object that contained a collection of sub objects of the same type. ---Files-------------------------------- nested_ds.txt (2.1 MB) marshal_slow.rb (212 Bytes) dataset_dump.txt (362 KB) better_slow_marshal.rb (239 Bytes) -- https://bugs.ruby-lang.org/