Что Ваши стратегии состоят в том, чтобы поддержать использованием памяти на низком уровне?

29
задан Kenny Grant 4 March 2015 в 09:38
поделиться

11 ответов

  1. Выбирают структуры даты, которые являются эффективными представлениями, масштабируют хорошо и делают то, в чем Вы нуждаетесь.
  2. алгоритмы Использования, которые работают с помощью эффективных структур данных, а не чрезмерно увеличенных в размере, но более легких.
  3. Взгляд еще, где. Ruby имеет мост C и его намного более легкое, чтобы быть памятью, сознательной в C, чем в Ruby.
6
ответ дан Mark Kegel 28 November 2019 в 01:38
поделиться

Я пытаюсь сохранить массивы & списки & наборы данных как можно меньше. Отдельный объект не имеет значения очень, поскольку создание и сборка "мусора" довольно быстро на наиболее современных языках.

В случаях необходимо считать своего рода огромный набор данных из базы данных, удостоверьтесь, что читали во вперед/только способ и обработали его в небольших битах вместо этого og загрузка всего в память сначала.

0
ответ дан s3v1 28 November 2019 в 01:38
поделиться

Я использую Python, но я предполагаю, что стратегии подобны.

я пытаюсь использовать небольшие функции/методы, так, чтобы локальные переменные были автоматически собраны "мусор", когда Вы возвращаетесь к вызывающей стороне.

В больших функциях/методах я явно удаляю большие временные объекты (как списки), когда они больше не необходимы. Заключительные ресурсы как можно раньше могли бы помочь также.

1
ответ дан 28 November 2019 в 01:38
поделиться

Я являюсь довольно новым в Ruby, но до сих пор я не нашел необходимым сделать что-либо специальное в этом отношении (то есть, вне того, что я просто склонен делать как программист обычно). Возможно, это вызвано тем, что память является более дешевой, чем время, которое потребовалось бы для серьезной оптимизации для него (мой код Ruby работает на машинах с 4-12 ГБ RAM). Это могло бы также быть, потому что задания, для которых я использую его, не продолжительны (т.е. это собирается зависеть от Вашего приложения).

1
ответ дан John Zwinck 28 November 2019 в 01:38
поделиться

Избегайте кода как это:

str = ''
veryLargeArray.each do |foo|
  str += foo
  # but str << foo is fine (read update below)
end

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

Вместо этого используйте Array#join:

str = veryLargeArray.join('')

Это реализовано в C очень эффективно и не подвергается Строковому созданию наверху.

ОБНОВЛЕНИЕ: Jonas прав в комментарии ниже. Мое предупреждение содержит для +=, но не <<.

2
ответ дан Grant Hutchins 28 November 2019 в 01:38
поделиться

Смотрите на Маленькое программное обеспечение Памяти - Шаблоны для Систем с Ограниченной памятью . Вы не определяете, какое ограничение памяти, но я принимаю RAM. В то время как не определенный для Ruby, я думаю, что Вы найдете некоторые полезные идеи в этой книге - шаблоны покрывают RAM, ROM и внешнюю память, и разделены на главные методы небольших структур данных, выделения памяти, сжатия, внешней памяти и маленькой архитектуры.

2
ответ дан Kevin Haines 28 November 2019 в 01:38
поделиться

Кроме в использовании памяти крайних случаев не что-то для волнения о. Время Вы тратите попытку уменьшить использование памяти, купит ПАРТИЯ из гигабайтов.

2
ответ дан Loren Pechtel 28 November 2019 в 01:38
поделиться

Я не рубиновый разработчик, но я думаю, некоторые методы и методы верны для любого языка:

Использование минимальная переменная размера, подходящая для задания
, Уничтожает и закрывает переменные и соединения, если не используемые
Однако, если у Вас будет объект, то необходимо будет использовать, много раз считают хранение его в объеме Любыми циклами с манипуляциями большой строковой разностью потенциалов работа над меньшей строкой и затем добавляют к большей строке

достойное Использование (попробуйте выгоду наконец), обработка ошибок для проверки объекты и соединения закрываются

, Когда контакт с наборами данных только возвращает минимум, необходимый

3
ответ дан alexmac 28 November 2019 в 01:38
поделиться

Я действительно не думаю, что это имеет значение все так очень. Создание Вашего кода, менее читаемого для улучшения потребления памяти, является чем-то, что необходимо только когда-либо делать если Вы потребность это. И потребностью, я имею в виду, имеют конкретный случай для профиля производительности и определенные метрики , которые указывают, что любое изменение решит проблему.

, Если у Вас есть приложение, где память будет ограничивающим фактором, тогда Ruby не может быть лучшим выбором. Однако я нашел, что мои приложения для направляющих обычно используют о 40-60mb из RAM на экземпляр Полукровки. В схеме вещей это не очень.

Вы могли бы быть в состоянии запустить свое приложение на JVM с JRuby - VM Ruby в настоящее время столь не совершенствуется как JVM для управления памятью и сборки "мусора". Эти 1,9 выпуска добавляют много улучшений и также существует альтернативный разрабатываемый VM's.

8
ответ дан Toby Hede 28 November 2019 в 01:38
поделиться

Я нашел, что Ruby Phusion Enterprise Edition (ветвление магистрали Ruby с очень улучшенной сборкой "мусора") имеет резкое значение в использовании памяти... Плюс, они сделали чрезвычайно легким установить (и удалить, если Вы находите потребность).

можно узнать больше и загрузить его на их веб-сайт .

9
ответ дан Ben Scofield 28 November 2019 в 01:38
поделиться

Единственной вещью, которую мы когда-либо имели, о котором на самом деле стоило вызвать беспокойство, является RMagick.

решение состоит в том, чтобы удостовериться, что Вы используете версию 2 RMagick и вызов Image#destroy! , когда Вы сделаны с помощью изображения

2
ответ дан Orion Edwards 28 November 2019 в 01:38
поделиться
Другие вопросы по тегам:

Похожие вопросы: