From: Tanaka Akira Date: 2007-09-08T11:43:52+09:00 Subject: [ruby-dev:31760] Re: optimize range space 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 がいかに無駄なことをしているか というのがわかるのですが、いかがでしょうか。 -- [田中 哲][たなか あきら][Tanaka Akira]