7

Я использую 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 секунд, открытие новой программы может занять до минуты. Из-за замедления некоторых программ даже происходит сбой.

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

2 ответа2

11

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

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

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

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


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

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

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

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

-1

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .