From: Masato KIYAMA Date: 2000-05-12T14:07:57+09:00 Subject: [ruby-list:22480] Re: IO.foreach ごぶさたしております. まさと@広島市立大学です. 佐藤さんのスクリプトと似たようなもので簡単に実験してみました. > 仮説1 > > Ruby版の方がメモリ消費量が多く、メモリを圧迫して一種のス > ラッシングを起こしている。 メモリ消費量が多いのは確かです. スラッシングが起きているかどうかわかりません. > 仮説2 > > 途中でGCが頻繁に起動されていてそれが遅くなる原因 GCのところで時間がかかっているのは確かです. 詳しく説明しますと,プログラムの実行が進むにつれて, 生き残っているオブジェクトが多くなり,GCのmark-sweepに時間がかかります. これは,プログラムを実行すればするほど,すなわち読み込む行数が 大きければ大きいほど,プログラム実行に占めるGCの割合が増えてしまいます. たぶん,200万行も読み込んでしまうと90%以上はGCの時間に取られている かもしれません.下手すると99%ぐらい?? よって,プログラムを速くするには,生き残るオブジェクトを増やさない 方法が良いと思います(あるのかな?). > のいずれかあるいは両方ではないかと思います。メモリに余裕があ > るのであれば重い処理の前にGC.disableを呼んでおくというのはあ > りえる手段ではあります。将来、GCがgeneration scavengingとか > になれば少しは改善されるかも。 余談になりますが,今,RubyのGCをgeneration scavengingにする研究をしています. ですから,それが実現できれば,佐藤さんのプログラムも改善されると思います. 8月に発表があるため,それまでには,実装します. いや,それじゃ遅いので,今月中には. といっても,うまく動くのやら. でも,良い評価プログラム発見♪ 1.7系の開発をお手伝いさせてくださいね.>まつもとさん 僕の修論はRubyで書くことに決定です. では