From: StephenSykes Date: 2004-08-04T05:16:32+09:00 Subject: Re: GzipReader problem Thank you for the fix. The failing example is indeed interesting. My marshalled object is 1.2Mb uncompressed. And Marshal uses over 90,000 reads requests to read it. And nearly 40,000 of those requests are for 0 bytes. I measured using this (reading from a non-gzipped file): class IO alias :_old_read :read @@x = Hash.new def read(n) @@x[n] ||= 0 @@x[n] += 1 _old_read(n) end def IO.showx @@x.sort.each {|v| print v[0]," - ",v[1],"\n"} print "Total:",@@x.inject(0) {|s,n| s+=n[1]},"\n" end end And here is the result after reading the object in using Marshal: bytes requested - number of reads 0 - 39322 3 - 10074 4 - 160 5 - 113 6 - 10 7 - 14 8 - 10175 9 - 10224 10 - 10314 11 - 1129 12 - 4114 13 - 4696 14 - 27 15 - 7 16 - 15 17 - 4 18 - 8 19 - 2 22 - 3 23 - 1 24 - 6 25 - 4 26 - 3 27 - 7 28 - 5 29 - 18 30 - 23 31 - 24 32 - 19 33 - 28 34 - 13 35 - 17 37 - 2 38 - 4 39 - 1 42 - 2 45 - 7 51 - 2 55 - 2 66 - 3 Total:90602 I can't see what is causing Marshal to behave so. In other cases Marshal seems to read everything in in just a couple of gulps. I will try to reduce the example size to figure out the reason for it. Stephen Tanaka Akira wrote: > In article , > "StephenSykes" writes: .... > > This wouldn't normally matter, but Marshal sometimes tries to read 0 > > bytes during its work for some reason which I am trying to investigate > > (anyone know what circumstances would cause marshal to do that?) > > Regards, > > Interesting example.