Насколько интенсивен этот метод памяти? - PullRequest
0 голосов
/ 17 ноября 2011

Я обнаружил, что следующий метод является пользователем памяти HEAVY на Ruby 1.8.7 и не дает абсолютно никаких результатов (когда должно быть много). Метод также работает как прелесть в Ruby 1.9.2, возвращая все желаемые результаты, не потребляя при этом никакой памяти (или около того!). Я думаю, это потому, что локальная переменная имеет то же имя, что и содержащий метод, но у кого-нибудь есть четкий ответ на этот вопрос?

def contact_of
   contact_of = Circle.joins(:ties).where('ties.contact_id' => self.guid).map { |circle| circle.owner } || []
   return contact_of.uniq!
end

Кстати, я использую Rails 3.1.1.

Спасибо!

ОБНОВЛЕНИЕ : часть вопроса ошибочна. Тот факт, что контакты не возвращаются, когда это должно произойти, является моим неправильным пониманием слова «uniq!» вместо «uniq». Первый возвращает nil, если дубликаты не найдены.

Все еще пытаюсь выяснить проблему с памятью ...

1 Ответ

0 голосов
/ 17 ноября 2011

Да, contact_of.uniq! сделает рекурсивный вызов той же функции. Я удивлен, что это работает в Ruby 1.9, на самом деле.

Кроме того, ваш запрос к БД ужасен, потому что он извлекает много ненужных записей, а затем дополнительно выбирает логику на стороне Ruby. Вы, вероятно, хотите начать поиск с Owner, а не с Circle.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...