From: Shin-ichiro Hara Date: 1999-12-22T18:50:52+09:00 Subject: [ruby-list:19840] Re: blade and namazu ( Re: ruby-list の過去ログの作り方) 原です。 In message [ruby-list:19796 |わたなべです. | |Shin-ichiro Hara writes: | |:私の所ではだめでした mknmz のバージョンによるのか(かなり |:古いの使ってます)、私の環境のせいかもしれません。 | |ひょっとして jperl5 を使ってますか? |以前 jperl で試したらやたらとメモリを喰った記憶があります. |jperl5.005_03-990619 より前だとmemory leak もあります. いえ、jperl ではありませんでした。 と、いうか mknmz 自体が perl スクリプトだと今知りました。(^^; 確かにこれは ruby で書き直さないといけませんね。なにがいけない のかよくわからないけれど。 |:ところで少し話は違うのですが、Ruby の DBM って、要素をどんどん増や |:すと、メモリをどんどん消費しますか?一辺 close して再 open する事 |:によって、メモリを節約できたりするでしょうか? | |メモリをあまり使わないためにデータベースライブラリがあるわけ |で, こちらはそれほど消費しないと思います. |Ruby 的には fetch すれば新たな String オブジェクトが生成され |るわけでその分どんどん消費されます. そうですか。という事はどんどん使ってしまっていいんですね。 実験してみました。 #!/usr/bin/ruby require "dbm" foo = DBM.new("herohero") a, b = "a", "b" foo[a] = b foo.each do |x, y| p [a.id, b.id] #=> [537464746, 537464736] p [x.id, y.id] #=> [537464726, 537464716] end foo.close ほんとだ。DBM ってオブジェクトを覚えないんですね。当たり前か。 で、適当なタイミングでディスクに情報を書き込みにいくようですね。 キャッシュはOSまかせなのかな。 さらに、今気づいたのですが、String に関しては Hash も オブジェクトをキーに関しては覚えないのですね。 foo = Hash.new foo[a] = b foo.each do |x, y| p [a.id, b.id] #=> [537464746, 537464736] p [x.id, y.id] #=> [537466586, 537464736] end