From: "NARUSE, Yui" Date: 2008-02-18T17:45:07+09:00 Subject: [ruby-dev:33841] Re: 文字列処理の高速化 ? 成瀬です。 Martin Duerst wrote: > ただの一例ですが、先週の金曜日に松本さんに見せたときに > 50秒ぐらいかかったプログラムはその後の commit でおそくなり、 > 65秒ぐらいかかっています。プログラムは以下の通り > (以前 Wolfgang Na'dasi-Donner が ruby-core に出した > ものがベースになっています。) > 特に金曜日の夕方あたり文字列処理や UTF-8 の処理を早くする > commit が色々ありましたので、なぜで遅くなるのかをちょっと > 疑問に思っています。 > > 宜しくお願いします。 Martin. > > # -*- encoding: utf-8 -*- > > def scan_s > s = "松本行弘 松江 島根" * 5000 > i = 0 > 10000.upto(30000) { |i| i+=1 if s[i]=='a' } > puts i > end > > scan_s これは現在高速化が働かないケースになります。なので、高速化に伴う変更で増 えた分岐によって逆に遅くなってしまっているでしょう。(たぶん use search_nonascii かな) 一行足して、 def scan_s s = "松本行弘 松江 島根" * 5000 s.valid_encoding? i = 0 10000.upto(30000) { |i| i+=1 if s[i]=='a' } puts i end とすると数秒で終わるようになると思います。で、このようなケースにおいて validation をどこかのタイミングでこっそりかけられるといいんですが、どう するのがいいのかなぁと悩んでいます。 -- NARUSE, Yui DBDB A476 FDBD 9450 02CD 0EFC BCE3 C388 472E C1EA