From: "Glass_saga (Masaki Matsushita)" Date: 2012-03-28T22:24:34+09:00 Subject: [ruby-dev:45451] [ruby-trunk - Feature #6218][Open] struct.cのrb_struct_s_members_m()について Issue #6218 has been reported by Glass_saga (Masaki Matsushita). ---------------------------------------- Feature #6218: struct.cのrb_struct_s_members_m()について https://bugs.ruby-lang.org/issues/6218 Author: Glass_saga (Masaki Matsushita) Status: Open Priority: Normal Assignee: Category: Target version: 表題の関数ではrb_struct_s_members()で得たArrayの内容をwhile文で1要素ずつ新たなArrayにpushしていますが、 これはrb_ary_dup()で済ませられるのではないでしょうか。 パフォーマンス上のメリットもあります。 require 'benchmark' sym = :a s = Struct.new(*Array.new(100){ sym = sym.succ }) Benchmark.bm do |x| x.report do 1000.times { s.members } end end 以上のコードを実行したところ、以下の結果となりました。 trunk(r35158): user system total real 0.000000 0.000000 0.000000 ( 0.003188) proposal: user system total real 0.000000 0.000000 0.000000 ( 0.000688) patchを添付します。 -- http://bugs.ruby-lang.org/