[ruby-dev:31760] Re: optimize range space

From: Tanaka Akira <akr@...>
Date: 2007-09-08 02:43:52 UTC
List: ruby-dev #31760
In article <877in961dy.fsf@fsij.org>,
  Tanaka Akira <akr@fsij.org> 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]

In This Thread