Actions
Bug #6509
closedString#gsub is too slow if receiver includes a binary
Description
=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
Files
Actions
Like0
Like0Like0