在Ruby中创建对象的各种方法

Sun*_*day 1 ruby memory-management

这些创建空Ruby Hash的方法有何不同?如果是这样的话?

myHash = Hash.new

myHash = {}
Run Code Online (Sandbox Code Playgroud)

我只是想深入了解Ruby中的内存管理.

tad*_*man 5

有许多方法可以在Ruby中创建Hash对象,但最终结果是相同类型的对象:

hash = { }
hash = Hash.new
hash = Hash[]
hash = some_object.to_h
hash = YAML.load("--- {}\n\n")
Run Code Online (Sandbox Code Playgroud)

就内存考虑而言,空哈希值明显小于其中具有奇异值的哈希值.在小尺寸下,阵列往往比Hashes小,但在更大的尺度上会更有效.

但实际上,在Ruby中要记住的重要一点是,每次创建一个对象都会花费你一些东西,即使它只是一个无穷小的数量.如果您不必要地创建数十亿个对象,这些小命中就会加起来.

通常,您应该避免创建不会使用的结构,而是根据需要创建它们,如果这不会使不必要的事情复杂化.例如,典型的模式是:

def cache
  @cache ||= { }
end
Run Code Online (Sandbox Code Playgroud)

在调用此方法之前,永远不会定义缓存哈希.在这种情况下节省的内存几乎无关紧要,但如果那是在加载大型配置文件或从数据库导入数百MB的数据,您可以想象在没有执行该数据的情况下节省的成本会很高.