From: Yukihiro Matsumoto Date: 2007-09-08T23:14:11+09:00 Subject: [ruby-dev:31762] Re: optimize range space まつもと ゆきひろです In message "Re: [ruby-dev:31760] Re: optimize range space" on Sat, 8 Sep 2007 11:43:52 +0900, Tanaka Akira writes: |In article <877in961dy.fsf@fsij.org>, | Tanaka Akira writes: | |> Range のメモリ消費を節約するのはどうでしょうか。 | |どのくらい節約できるのか測ってみました。 | |節約する前は、以下のように、1000000個の range を生成すると |106Mbytes ほど必要です。 | |% time ./ruby -e 'a = []; 1000000.times {|i| a << (i..i) } |print File.read("/proc/#{$$}/status").gsub(/^[^V].*\n/, "")' |VmPeak: 105604 kB |VmSize: 105604 kB |VmLck: 0 kB |VmHWM: 102596 kB |VmRSS: 102596 kB |VmData: 102772 kB |VmStk: 84 kB |VmExe: 1176 kB |VmLib: 1492 kB |VmPTE: 116 kB |./ruby -e 7.61s user 0.20s system 98% cpu 7.952 total | |節約すると、以下のように、 35Mbytes ほどで済みます。 | |% time ./ruby -e 'a = []; 1000000.times {|i| a << (i..i) } |print File.read("/proc/#{$$}/status").gsub(/^[^V].*\n/, "")' |VmPeak: 35416 kB |VmSize: 35416 kB |VmLck: 0 kB |VmHWM: 32424 kB |VmRSS: 32424 kB |VmData: 32588 kB |VmStk: 84 kB |VmExe: 1176 kB |VmLib: 1492 kB |VmPTE: 48 kB |./ruby -e 3.18s user 0.06s system 97% cpu 3.332 total | |つまり、使用メモリは半分以下になり、割合としては約 6割削減で |きています。 | |さらに、かかった時間も、8秒から 3.3秒くらいと減り、倍以上に |高速化しています。 | |こうしてみると、いまの Range がいかに無駄なことをしているか |というのがわかるのですが、いかがでしょうか。 数字があると説得力が増しますね。コミットしてください。