Sun*_*day 1 ruby memory-management
这些创建空Ruby Hash的方法有何不同?如果是这样的话?
myHash = Hash.new
myHash = {}
Run Code Online (Sandbox Code Playgroud)
我只是想深入了解Ruby中的内存管理.
有许多方法可以在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的数据,您可以想象在没有执行该数据的情况下节省的成本会很高.