在Ruby 1.9.3中以字节为单位获取给定哈希(或任何对象)大小的最佳方法是什么?
" 查找特定Hash在Ruby中使用的字节数 "的解决方案似乎在1.9.3中无效,因为memsize_of它不在ObjectSpace的文档中.
ste*_*lag 39
ObjectSpace.memsize_of 是否在1.9.3 中有效,有无记录:
puts RUBY_VERSION #=>1.9.3
require 'objspace'
p ObjectSpace.memsize_of("a"*23) #=> 23
p ObjectSpace.memsize_of("a"*24) #=> 24
p ObjectSpace.memsize_of("a".*1000) #=> 1000
h = {"a"=>1, "b"=>2}
p ObjectSpace.memsize_of(h) #=> 116
Run Code Online (Sandbox Code Playgroud)
kas*_*rnj 10
我曾经遇到过同样的问题.您必须意识到,实际大小几乎无法确定,因为它取决于您使用的是哪个VM,VM的哪个版本等等.此外,如果您正在引用一个字符串,也会在其他地方引用该字符串,那么取消设置您的哈希值并不意味着特定的包含字符串也将被取消设置,因为它已在其他地方被引用.
我曾经写过一个分析器,通过遍历给定对象中的所有包含对象来计算对象的估计大小.获得灵感来编写自己的:
https://github.com/kaspernj/knjrbfw/blob/master/lib/knj/memory_analyzer.rb#L334
我的工作方式如下:
require "rubygems"
require "knjrbfw"
analyzer = Knj::Memory_analyzer::Object_size_counter.new(my_hash_object)
puts "Size: #{analyzer.calculate_size}"
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
25075 次 |
| 最近记录: |