Una vez tuve el mismo problema. Debe tener en cuenta que el tamaño real es casi imposible de determinar, ya que depende de la máquina virtual que esté usando, qué versión de la máquina virtual, etc. Además, si está haciendo referencia a una cadena, que también se hace referencia en otro lugar, entonces la desconexión de su hash no significa que la cadena contenida específica también se desarmará, ya que ya se hace referencia a ella en otro lugar.
Una vez escribí un analizador para contar el tamaño estimado de los objetos, pasando por todos los objetos contenidos en el objeto dado. Como fuente de inspiración para escribir su propia:
https://github.com/kaspernj/knjrbfw/blob/master/lib/knj/memory_analyzer.rb#L334
mina funciona así:
require "rubygems"
require "knjrbfw"
analyzer = Knj::Memory_analyzer::Object_size_counter.new(my_hash_object)
puts "Size: #{analyzer.calculate_size}"
¿Quieres saber el tamaño recursivo, o solo el Hash en sí? Es decir, si ya tiene objetos almacenados en otras variables, pero también en el hash, ¿quiere considerar que contribuyen al tamaño del hash? (Tener un objeto en más de un lugar no usa el doble de memoria)./Solo estoy pensando en cómo hacer esto en la API C subyacente. – d11wtq
Buena pregunta. Solo me interesa el hash en sí mismo y los valores de cadena que contiene. – bevanb
pregunta parece similar a esto: http://stackoverflow.com/questions/3973094/how-to-measure-the-size-of-a-ruby-object – joshnuss