Мне интересно, что это за использование WeakRef обработки большого набора данных?Какова стоимость WeakRef в Ruby?
Задача, которую я хочу, чтобы выполнить что-то вроде этого:
huge = get_array_of_weak_refs # 100000000 entries or more :)
result = huge.length * huge.inject(0) { |accum, it| accum += it.total } # much more complicated, just a sample
Предполагая, что get_array_of_weak_refs
не отнимает много времени и имеет O(1)
сложность. Таким образом, проблема заключается только в размере памяти массива huge
.
Я также не забочусь о времени, затрачиваемом на вычисление result
.
Если huge
является обычным массивом, то, конечно, он может просто не помещаться в память.
Но поможет ли это, если WeakRef будет использоваться в качестве элементов этого массива? Так что после того, как мы повторили элемент x
, это может быть сбор мусора, чтобы высвободить некоторую память.
Что такое накладные расходы для этого сценария? Любые альтернативы?
Загрузка данных в куски по-прежнему будет хранить все объекты в памяти до тех пор, пока используется «огромная» переменная. –
Но ваш процесс итеративен, поэтому вам не нужно хранить весь «огромный» в памяти, не так ли? – glebm
Истина для этого случая. –