Actions
Feature #6218
closedstruct.cのrb_struct_s_members_m()について
Feature #6218:
struct.cのrb_struct_s_members_m()について
Description
表題の関数では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を添付します。
Files
Actions