Time#_loadがやたら重い

1000個で6秒程かかる.to_iしてMarshal.dumpなら0.01秒くらい.タイムゾーンとかインスタンス変数とかなくなるけど.って精度が下がるか.
それにしてもかかりすぎじゃない?

require 'benchmark'

class C
  def initialize(sec)
    @t = Time.at(sec)
  end
  def _dump(limit)
    Marshal.dump(@t.to_i, limit)
  end
  def self._load(str)
    @t = Time.at(Marshal.load(str))
  end
end

t = Time.now
s = Marshal.dump(t)
i = Marshal.dump(t.to_i)
c = Marshal.dump(C.new(t.to_i))
n = 1000

Benchmark.bmbm(7) {|_|
  _.report("marshal:") {
    n.times { time = Marshal.load(s) }
  }
  _.report("fixnum:") {
    n.times { time = Time.at(Marshal.load(i)) }
  }
  _.report("user:") {
    n.times { time = Marshal.load(c) }
  }
}
Rehearsal --------------------------------------------
marshal:   0.410000   1.820000   2.230000 (  6.782736)
fixnum:    0.010000   0.000000   0.010000 (  0.004417)
user:      0.000000   0.000000   0.000000 (  0.007743)
----------------------------------- total: 2.240000sec

               user     system      total        real
marshal:   0.420000   1.820000   2.240000 (  6.779039)
fixnum:    0.000000   0.000000   0.000000 (  0.003146)
user:      0.010000   0.000000   0.010000 (  0.006843)

流石にここまで遅いと困る.秒単位で十分だから適当に_dump/load定義してしまおうか.
totalとreadのかけ離れ具合もなんなんだろう.