Ich hatte einmal das gleiche Problem. Sie müssen sich bewusst sein, dass die tatsächliche Größe fast unmöglich zu bestimmen ist, da es davon abhängt, welche VM Sie verwenden, welche Version der VM und so weiter. Wenn Sie auf einen String verweisen, auf den auch anderswo verwiesen wird, bedeutet dies nicht, dass der betreffende enthaltene String auch nicht gesetzt ist, da er bereits anderweitig referenziert wurde.
Ich habe einmal einen Analysator geschrieben, um die geschätzte Größe von Objekten zu zählen, indem ich alle enthaltenen Objekte in dem gegebenen Objekt durchlaufe. Lassen Sie sich inspirieren schreiben Ihre eigenen:
https://github.com/kaspernj/knjrbfw/blob/master/lib/knj/memory_analyzer.rb#L334
-Mine funktioniert wie folgt:
require "rubygems"
require "knjrbfw"
analyzer = Knj::Memory_analyzer::Object_size_counter.new(my_hash_object)
puts "Size: #{analyzer.calculate_size}"
Wollen Sie wissen, die Größe davon rekursiv oder nur der Hash selbst? Ich meine, wenn Sie bereits Objekte in anderen Variablen, aber auch im Hash gespeichert haben, möchten Sie sie als Beitrag zur Hash-Größe betrachten? (Wenn Sie ein Objekt an mehr als einer Stelle haben, wird nicht doppelt so viel Speicher belegt)./Ich denke nur darüber nach, wie dies in der zugrunde liegenden C-API zu tun ist. – d11wtq
Gute Frage. Ich interessiere mich nur für den Hash selbst und die darin enthaltenen String-Werte. – bevanb
Frage scheint dies ähnlich: http://stackoverflow.com/questions/3973094/how-to-measure-the-size-of-a-ruby-object – joshnuss