Много оперативной памяти указано как свободное, а не резервное

549
user173724

Я копался в Resource Monitor в Windows и заметил, что часто большой объем памяти указывается как свободный, а не резервный. Я понимаю, что superfetch в основном извлекает то, что вам, вероятно, понадобится, и кэширует его в оперативной памяти, так почему же он не использует это пространство?

Кроме того, я знаю, что такая система, как readyboost, должна хранить кэшированные файлы, к которым часто обращаются, с компьютера. Тем не менее, глядя на Resource Monitor, я замечаю, что наибольшее количество свободного места происходит при закрытии программы. Почему он не хранит данные из этой закрытой программы в оперативной памяти, чтобы он мог быстрее загружаться в то же самое состояние?

Эта конкретная деталь, которую я заметил, привела меня к тому, что я задал этот вопрос суперпользователю, в котором ранние обсуждения показали, что любое повышение производительности, которое я видел, скорее всего, было эффектом плацебо.

ram example

0
Нет смысла хранить случайные данные в ОЗУ / кэшироваться. Только сопоставленные файлы можно использовать повторно. Daniel B 6 лет назад 1

1 ответ на вопрос

1
Anaksunaman

Я понимаю, что superfetch в основном извлекает то, что вам, вероятно, понадобится, и кэширует его в оперативной памяти, так почему же он не использует это пространство?

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

В качестве встречного вопроса - учитывая, что вся ваша работающая система занимает ~ 4 ГБ ОЗУ с 2 ГБ в режиме ожидания, что вы часто запускаете, что потребует дополнительного гигабайта или двух?

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

Очистка использованной памяти является неотъемлемой особенностью каждой программы, потому что не выполнение этого может вызвать проблемы с любой программой, которая хочет использовать эту же память в будущем. Фактически, (повторное) использование памяти, которая уже находится в определенном состоянии, является серьезной ошибкой в ​​программировании, потому что данные интерпретируются по-разному различными программами или даже одной и той же программой между запусками.

Аналогичным образом, «загрузка до одного и того же состояния», вероятно, нежелательна для многих программ. Я усвоил урок в Tomb Raider старой школы - никогда не экономь, пока ты в огне.

Шутка в сторону, хотя есть много причин, по которым нежелательно сохранять данные между сессиями, особенно если есть ошибка. Это также предполагает осведомленность о программе, которую Windows может не иметь (что мы оставляем?).

Также рассмотрите программы, которые не используются часто или которые действительно вызывают скачок в использовании памяти. Если свободной оперативной памяти мало или ее нет, память должна быть очищена для использования. Зачастую это может привести к записи на диск (и последующему чтению с него, вероятно, позже), что намного медленнее, чем ОЗУ.

Наконец, в качестве комментария, я думаю, что предположение о размере данных здесь тоже неверно. Для запуска программы может потребоваться большой объем памяти, но если вы не делаете что-то с мультимедиа, программные «данные», как правило, не очень велики. Например, Firefox на моей машине требует около 300 МБ памяти. Но любая веб-страница "данные" почти наверняка меньше 20 МБ.


Если вы абсолютно настроены на использование этой памяти, вот две мысли:

  • Просмотрите msconfig и убедитесь, что нет ограничения памяти на месте. Нет никаких признаков того, что это проблема, но вы можете дважды проверить, что Windows настроена на использование максимально возможного объема памяти.

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

Firefox использует 300 МБ? Сколько вкладок у вас открыто, у меня намного выше. Что касается других моих программ, подумайте о 3D-моделировании. Хотя это все еще не ясно, почему он не загружает всю свободную оперативную память. user173724 6 лет назад 0
Для Firefox одна вкладка (Google). Для нескольких вкладок это часто намного выше (пропорционально количеству открытых вкладок). Что касается 3D-моделирования, это может быть большой объем памяти. Но опять же, что представляет собой данные (или, по крайней мере, полезные данные)? Тест на рендеринг с интенсивным циклом в Blender составляет около 230 МБ на жестком диске, но около 1 ГБ при загрузке в Blender. Но как мы можем отобразить этот «больший» набор данных? Распределение ОЗУ является сложным, и программы не используют одну и ту же память между запусками. Как мы связываем эти данные со вторым запуском Blender? Ответ - мы не можем. Мы можем только повторно использовать файл .blend, и это 230 МБ, а не 1 ГБ. Anaksunaman 6 лет назад 0
Также учтите, что полная память - это память, которую другая программа не может использовать с очищаемыми данными. Если бы мы использовали все 4 ГБ не-ОС памяти выше, а затем хотели запустить Blender и упомянутый тест рендеринга, нам пришлось бы очистить около 1 ГБ пространства. Это кэшированные данные, которые часто записываются на диск, что намного медленнее, чем работа с ОЗУ, и, следовательно, запуск Blender может занять больше времени. Поэтому кэширование в этом случае будет бременем, а не выгодой. Anaksunaman 6 лет назад 0
В качестве двух быстрых мыслей вы можете проверить msconfig, чтобы убедиться, что максимальный объем вашей памяти доступен для использования Windows. Другая идея - создать RAM-диск. Не совсем кеширует, но он использует эту память и потенциально ускоряет любые программы или файлы, используемые с ней. Anaksunaman 6 лет назад 0
Я провел некоторые эксперименты с сочетанием RAM-диска и готового буста. Казалось, что это ускоряет ход событий, но мне нужны тесты, основанные не только на личных мнениях, чтобы подтвердить это. user173724 6 лет назад 0
Да, жим, наверное, хорошая идея. Удачи. знак равно Anaksunaman 6 лет назад 0
Могу ли я спросить вас, что вы можете быть хорошим методом для такого рода вещей? Я знаю, как определить один компонент в отдельности, но это своего рода синтез нескольких компонентов, что может сработать лучше всего? user173724 6 лет назад 0
Честно говоря, я не уверен, что есть 100% хороший способ. Вам, возможно, придется пойти больше с кучей A / B-тестирования и вашего интуитивного наблюдения за этими тестами. В частности, для ReadyBoost вы можете использовать Системные инструменты \ Performance \ Monitoring Tools \ Performance Monitor в консоли управления компьютером и добавить счетчики ReadyBoost Cache, чтобы отслеживать, сколько кеша используется в данный момент и когда кеш считывается или записывается. к. Но на самом деле он не говорит вам, какой именно производительности вы можете добиться, используя ReadyBoost. Anaksunaman 6 лет назад 0
Вы также можете посмотреть в SandS от SiSoftware. Он имеет совокупный балл и некоторые отдельные синтетические тесты, которые могут быть полезны для получения представления о производительности. Я действительно испытал бы искушение, хотя бы просто выбрать какое-то программное обеспечение, которое я использую регулярно, и протестировать его настолько хорошо, насколько смогу. Некоторые программы имеют эти встроенные функции, а другие просто наблюдения. В качестве примера я мог легко увидеть, как можно выполнить два рендера тяжелой сцены с различными комбинациями ReadyBoost и включенного / выключенного привода RAM или что у вас есть, и просто сравнить, насколько быстро он рендерился. Anaksunaman 6 лет назад 0
За мои деньги, пока вы наблюдаете реальные цифры (например, время загрузки, использование памяти и т. Д.). этот вид тестирования вполне законен. Anaksunaman 6 лет назад 0

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