2014-03-13 3 views
3

Некоторые классы имеют метод size, который возвращает размер объекта в памяти. Например:Как измерить размер ActiveRecord в памяти?

1.size возвращает 4, что означает, что для хранения объекта Fixnum требуется 4 байта (класс 1). То же самое касается Bignum объектов: 4294967296.size возвращается 8.

ActiveRecord::Base похоже, что не имеет эквивалентного метода. Что я могу сделать, если хочу измерить, сколько памяти у меня ActiveRecord?

+0

Возможный дубликат [Как получить размер объекта ruby ​​в mb в Rails?] (Http://stackoverflow.com/questions/30042535/how-do-i-get-the-size-of- а-рубиновый объектно-в-MB-в-рельсы) –

ответ

2

Метод size возвращает количество байтов в машинном представлении числа. Это не обязательно (и не на практике) дает вам фактическое использование памяти. В то время как Fixnum действительно занимает 4 байта памяти (в MRI, другие реализации Ruby отличаются), Bignum занимает больше памяти, поскольку он является фактическим объектом Ruby.

Аналогично, другие классы, которые реализуют size метод, как String, Array или Hash не возвращает использование памяти, но количество элементов, которые они содержат (символы, элементы массива, ключи соответственно).

Как правило, вы не можете определить, сколько памяти занимает объект в памяти (ну, вы можете, но это не даст вам нужную вам информацию). Объект ActiveRecord относится к большому числу других объектов, таких как Хеши, Строки, Символы, .... Вам, вероятно, также придется считать их, возможно, даже рекурсивными. Затем вам как-то нужно иметь дело с ссылками на одни и те же объекты, а где-то определять границу вашего дерева объектов, пока вы не закончите повторное внедрение большей части сборщика мусора.

Итак, в конце концов, вы не можете практически определить использование памяти одного объекта ActiveRecord, и вам, вероятно, не стоит этого делать. Для получения дополнительной информации, пожалуйста, также см. Аналогичный ответ на мой вопрос: another question.

Смежные вопросы