Windows, почему 8 ГБ оперативной памяти кажутся всего лишь несколькими МБ?

Windows, почему 8 ГБ оперативной памяти кажутся всего лишь несколькими МБ?

Я использую Windows 7 x64 с 4-ядерным процессором Intel i7 и 8 ГБ оперативной памяти, но в последнее время у меня такое ощущение, что вся «оперативная память» моего компьютера размещена исключительно на жестком диске.

Вот что показывает диспетчер задач:

Скриншот диспетчера задач

Общий объем памяти, используемый процессами в списке, составляет всего около 1 ГБ. И вот что происходит на моем компьютере уже несколько дней: одна программа (Cataloger.exe) постоянно обрабатывает большие объемы файлов (около 5-10 МБ каждый), многократно открывая и считывая их в целях каталогизации. Но она не растет слишком сильно в памяти и остается примерно такого размера, 100 МБ. Однако объем данных, который она обрабатывает, скажем, за 30 минут, можно измерить в гигабайтах.

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

Скриншот RamMap

Так что мне кажется, что Windows хранит в оперативной памяти огромные объемы данных, которые больше не нужны, перенаправляя все запросы на выделение оперативной памяти в файл подкачки на жестком диске. Даже когда я закрываю Cataloger.exe, RamMap сообщает, что размер сопоставленного файла остается примерно тем же в течение долгого времени. И это касается не только этой конкретной программы. Ранее я замечал, что подобное замедление происходило после некоторых масштабных файловых операций с другими программами. Так что это на самом деле не исключительное поведение Cataloger.exe, и проблема проявлялась много раз в прошлом.

Что бы это ни было, оно замедляет работу компьютера примерно в 50 раз. Открытие новой вкладки в Chrome занимает 20-30 секунд, открытие новой программы может занять до минуты. Из-за замедления некоторые программы даже зависают.

Так как вы думаете, проблема кроется в кэшировании файлов или где-то еще? Как мне ее решить?

решение1

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

Если вы посмотрите на RAMMap, вы заметите, что большинство этих кэшированных файлов размещены в режиме «Standby» — это означает, что они хранятся в памяти, потому что Windows нуждалась в них в прошлом, может понадобиться снова, и она с радостью удалит их, если что-то ещена самом деленужно пространство.

По сути, вы видите здесь, что ваша программа запрашивает загрузку большого файла данных, поэтому Windows загружает его в память. Управление памятью — очень сложный процесс, и то, что Windows делает под капотом, — это принятие решения: она смотрит на текущие процессы и видит, что Chrome занимает, скажем, 5 ГБ памяти (много вкладок!), но большая часть этой памяти не использовалась в течение последнего часа. На этом этапе у нее есть выбор: она может оставить Chrome в памяти и не кэшировать файлы. Это означает, что процессу Cataloger может потребоваться несколько часов вместо минут для обработки файла, особенно если он много перемещается по файлу; или она может выгрузить вкладки Chrome и загрузить файл Cataloger в память, а затем быстро завершить этот процесс.

Теперь вы почувствуете боль, когда Windows придется выгружать chrome обратно в память, но Windows не сделает этого, пока вы не попросите об этом (т. е. не вернете chrome обратно на передний план и не выберете вкладку, которая была выгружена), и в конечном итоге вам нужно оценить, больше или меньше боли от этого, чем боли от вашей задачи Cataloger, которая должна ждать своей памяти. Вы можете попробовать запустить программу как службу и сказать Windows оптимизировать для отзывчивости или попробовать понизить приоритет процесса, но я почти уверен, что вы захотите, чтобы процесс Cataloger завершился как можно быстрее - пока он загружает ваш дисковый ввод-вывод, вся ваша система будет невероятно вялой. Все, что требует дискового ввода-вывода, будет помещено в очередь (даже просмотр веб-страниц - у него тоже есть кэш, который он использует!). Программы будут открываться медленно, новые вкладки будут открываться быстро, но фактическое использование их для чего-либо будет медленным.


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

Если у вас есть доступ к исходному коду программы Cataloger (или вы можете запросить внесение в нее изменений), ее можно настроить для открытия файлов с помощью FILE_FLAG_NO_BUFFERING, что заставит Windows пропускать дисковый кэш для файлов, открытых программой таким образом.

Если это не вариант, то, если только процесс каталогизатораимеетдля запуска на вашей системе, я бы поискал, нет ли свободного компьютера, который не используется, и посмотрел, можно ли настроить его как выделенную машину для каталогизации этих файлов. Если его еще нет, то простое увеличение оперативной памяти может быть еще одним вариантом; цены на память в наши дни довольно низкие, и разработчики это знают — большинство вещей оптимизированы для скорости и отзывчивости за счет памяти. 8 ГБ — это уже не то, что было раньше.

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

решение2

У меня была точно такая же проблема, это процесс под названием "intellimem.exe". Я удалил его и БАБОМ! от 80% оперативной памяти и файла подкачки до отсутствия файла подкачки и использования оперативной памяти в 20%! И у меня нет никаких проблем.

Связанный контент