From: "okkez (okkez _)" Date: 2012-05-29T10:03:10+09:00 Subject: [ruby-dev:45688] [ruby-trunk - Bug #6509][Open] String#gsub is too slow if receiver includes a binary Issue #6509 has been reported by okkez (okkez _). ---------------------------------------- Bug #6509: String#gsub is too slow if receiver includes a binary https://bugs.ruby-lang.org/issues/6509 Author: okkez (okkez _) Status: Open Priority: Normal Assignee: Category: core Target version: 2.0.0 ruby -v: ruby 2.0.0dev (2012-05-28 trunk 35830) [x86_64-linux] =begin 以下のようなコードで String#gsub が遅くなります。 * b = "" の場合(A): 0.2840230464935303 * b = "\xB9" の場合(B): 4.183771848678589 # -*- coding: utf-8 -*- a = ("abcde\n"*50000).force_encoding("binary") #b = "" b = "\xB9".force_encoding("binary") c = ("efghi\n"*50000).force_encoding("binary") d = "#{a}#{b}#{c}" start = Time.now.to_f d.gsub(/\n/) { "" } puts(Time.now.to_f - start) それぞれの場合で、プロファイルを取ってみたので添付します。 (B)の場合に、search_nonascii を約20万回呼び出して処理時間の92%を費しています。 (A)の場合は、約10万回しか呼び出しておらず、処理時間も短いです。 =end -- http://bugs.ruby-lang.org/