зеркало из https://github.com/github/ruby.git
string.c: Improve String#prepend performance if only one argument is given
* string.c (rb_str_prepend_multi): Prepend the string without generating temporary String object if only one argument is given. This is very similar with https://github.com/ruby/ruby/pull/1634 String#prepend -> 47.5 % up [Fix GH-1670] [ruby-core:82195] [Bug #13773] * Before String#prepend 1.517M (± 1.8%) i/s - 7.614M in 5.019819s * After String#prepend 2.236M (± 3.4%) i/s - 11.234M in 5.029716s * Test code require 'benchmark/ips' Benchmark.ips do |x| x.report "String#prepend" do |loop| loop.times { "!".prepend("hello") } end end git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@60480 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
Родитель
fd14454688
Коммит
b03a44c4ac
5
string.c
5
string.c
|
@ -3077,7 +3077,10 @@ rb_str_prepend_multi(int argc, VALUE *argv, VALUE str)
|
|||
{
|
||||
str_modifiable(str);
|
||||
|
||||
if (argc > 0) {
|
||||
if (argc == 1) {
|
||||
rb_str_update(str, 0L, 0L, argv[0]);
|
||||
}
|
||||
else if (argc > 1) {
|
||||
int i;
|
||||
VALUE arg_str = rb_str_tmp_new(0);
|
||||
rb_enc_copy(arg_str, str);
|
||||
|
|
Загрузка…
Ссылка в новой задаче