From: "mame (Yusuke Endoh)" Date: 2012-05-22T00:11:56+09:00 Subject: [ruby-dev:45665] [ruby-trunk - Feature #6218] struct.cのrb_struct_s_members_m()について Issue #6218 has been updated by mame (Yusuke Endoh). Assignee changed from Glass_saga (Masaki Matsushita) to mame (Yusuke Endoh) Glass_saga さんのコミッタ化にはもうちょっと時間がかかりそうみたいなので、 とりあえず私がやっちゃいます。 -- Yusuke Endoh ---------------------------------------- Feature #6218: struct.cのrb_struct_s_members_m()について https://bugs.ruby-lang.org/issues/6218#change-26747 Author: Glass_saga (Masaki Matsushita) Status: Assigned Priority: Normal Assignee: mame (Yusuke Endoh) 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/