Эффективный, надежный счетчик активных объектов - PullRequest
0 голосов
/ 19 августа 2009

Существует ли механизм для получения надежного значения количества активных объектов в среде Ruby? Я нашел несколько подходов для получения ответа, и обычно они напоминают:

c = 0   
ObjectSpace.each_object { c += 1 }

К сожалению, проблема в том, что существует большое количество объектов Fixnum, созданных просто для составления таблиц, не говоря уже о некоторых накладных расходах самого метода ObjectSpace.

Конечно, можно отфильтровать результаты по классам и просто игнорировать объекты Fixnum, но это кажется несовершенным обходным решением, так как он делает предположения о том, как работает each_object.

Я просто хотел бы найти механизм для определения того, сколько мусора образуется между одной точкой во время работы и другой, поскольку сборщик мусора может быть отключен в диагностических целях для обеспечения точного теста.

1 Ответ

2 голосов
/ 19 августа 2009

Я не вижу способа сделать это напрямую с ядром или GC. Rails пытается сделать это при тестировании производительности - см. Исходный код для active_support / testing / performance.rb . К сожалению, похоже, что для всех этих методов требуется исправленный интерпретатор Ruby.

Документы RubyProf также могут быть полезны; это один из методов, которые Rails пытается использовать. Если вы примените патч (не знаете, где его найти), вы должны просто сделать:

RubyProf.measure_allocations; RubyProf::ALLOCATIONS

...