首页 > 解决方案 > 如何避免同一字符串的多次分配?

问题描述

下面的代码应该(?)根据SamSaffron 的一篇文章和他的pr 分配一个 "prefix:foo" 和一个 "foo" 字符串到 rails。我已经实现了基本相同的技术(带减号),但没有看到任何差异。我正在使用红宝石 2.5.0。2.6也是一样。

简单的玩具示例来说明这一点:

# frozen_string_literal: true

require "memory_profiler"

def remove_prefix(str)
  -str.sub(/.*prefix:/, "") # notice '-' here
end

report = MemoryProfiler.report do
  str = "prefix:foo"

  1000.times do
    remove_prefix(str)
  end
end

report.pretty_print

结果:

Allocated String Report
-----------------------------------
      1000  "foo"
      1000  memory.rb:6

      1000  "prefix:foo"
      1000  memory.rb:6

那个代码有什么问题?或者如何(如果可以)避免对同一字符串进行多次分配?

标签: ruby

解决方案


推荐阅读