Una volta ho avuto lo stesso problema. Devi essere consapevole che la dimensione reale è quasi impossibile da determinare, poiché dipende dalla VM che stai utilizzando, dalla versione della VM e così via. Inoltre, se si fa riferimento a una stringa, viene fatto riferimento anche da qualche altra parte, quindi il disinserimento dell'hash non significa che anche la stringa specifica contenuta sarà disinserita, poiché è già referenziata da qualche altra parte.
Una volta ho scritto un analizzatore per contare le dimensioni stimate degli oggetti, passando attraverso tutti gli oggetti contenuti nell'oggetto dato. Trarre ispirazione per scrivere il proprio:
https://github.com/kaspernj/knjrbfw/blob/master/lib/knj/memory_analyzer.rb#L334
miniera funziona così:
require "rubygems"
require "knjrbfw"
analyzer = Knj::Memory_analyzer::Object_size_counter.new(my_hash_object)
puts "Size: #{analyzer.calculate_size}"
Vuoi sapere la dimensione di esso in modo ricorsivo, o solo l'Hash stesso? Voglio dire, se hai già degli oggetti memorizzati in altre variabili, ma anche nell'Hash, vuoi considerarli come contributi alla dimensione di Hash? (Avere un oggetto in più di un posto non usa il doppio della memoria)./Sto solo pensando a come farlo nell'API C sottostante. – d11wtq
Buona domanda. Mi interessa solo l'hash stesso e i valori di stringa in esso contenuti. – bevanb
domanda sembra simile a questo: http://stackoverflow.com/questions/3973094/how-to-measure-the-size-of-a-ruby-object – joshnuss