On Fri, 16 Feb 2001, Michael Davis wrote:

> I have provided a small ruby script to test Marshal dump and how efficient
> it is.  It Marshal.dumps 10000 arrays and then Marhsal.loads them back in.
>  The problem is that it only reads 9895 rows.  Is this a bug?  Can someone
> tell me where 105 of my rows went?

They're probably lurking in the writing file's buffer.  Try adding an
fp.close, it worked for me.

>          print "\nTime test (using Marshal dump on Array):\n"
>          fp = File.new("Membership.dmp", "w+")
>          t = Time.now
>          rows = 0
>          1.upto(10000) do |i|
>             data = [i, 'Davis', 'Michael', 0]
>             Marshal.dump(data, fp)
>             rows += 1
>          end

           fp.close

>          print "  It took #{Time.now - t} seconds to insert ", rows, "
> rows\n"
>          t = Time.now
>          count = 0
>          rows = 0
>          fp2 = File.new("Membership.dmp", "r+")
>          begin
>             1.upto(10000) do |i|
>                data = Marshal.load(fp2)
>                count += 1 if (data[0] > 9000)
>                rows += 1
>             end
>          rescue      # we want to trap all errors and report them without
> failing
>             print " - ", $!, "\n"
>          end
>          print "  It took #{Time.now - t} seconds to count the rows
> (#{rows})\n"

[mike@ratdog tmp]$ ruby marsh.rb

Time test (using Marshal dump on Array):
  It took 0.2925 seconds to insert 10000 rows
  It took 0.399407 seconds to count the rows (10000)

Hope this helps,

Mike

-- 
mike / stok.co.uk                    |           The "`Stok' disclaimers" apply.
http://www.stok.co.uk/~mike/       |
GPG PGP Key 1024D/059913DA         | Fingerprint      0570 71CD 6790 7C28 3D60
stok / colltech.com (CT - work)      |                  75D2 9EC4 C1C0 0599 13DA