Raz miałem ten sam problem. Musisz mieć świadomość, że rzeczywisty rozmiar jest prawie niemożliwy do ustalenia, ponieważ zależy to od używanej maszyny wirtualnej, której wersji maszyny wirtualnej i tak dalej. Ponadto, jeśli odwołujesz się do łańcucha znaków, który jest również przywoływany gdzie indziej, wówczas wyłączenie hasza nie oznacza, że określony łańcuch będzie również unieważniony, ponieważ jest już przywoływany gdzie indziej.
Kiedyś napisałem analizator, aby policzyć szacowany rozmiar obiektów, przechodząc przez wszystkie zawarte obiekty w danym obiekcie. Zainspiruj napisać własny:
https://github.com/kaspernj/knjrbfw/blob/master/lib/knj/memory_analyzer.rb#L334
Kopalnia działa tak:
require "rubygems"
require "knjrbfw"
analyzer = Knj::Memory_analyzer::Object_size_counter.new(my_hash_object)
puts "Size: #{analyzer.calculate_size}"
Chcesz wiedzieć rozmiar rekurencyjnie, czy po prostu sam Hash? Mam na myśli, jeśli masz już obiekty przechowywane w innych zmiennych, ale także w mieszaniu, czy chcesz je uważać za przyczyniające się do rozmiaru hasza? (Posiadanie jednego obiektu w więcej niż jednym miejscu nie wymaga dwukrotnej pamięci)./Po prostu zastanawiam się, jak to zrobić w bazowym C API. – d11wtq
Dobre pytanie. Interesuje mnie sam skrót i zawarte w nim wartości ciągów. – bevanb
Pytanie wydaje się podobny do tego: http://stackoverflow.com/questions/3973094/how-to-measure-the-size-of-a-ruby-object – joshnuss