У меня есть конкретная программа с интенсивным использованием оперативной памяти, которую я запускаю, которая замедляет всю мою систему на несколько часов после каждого запуска - есть ли в ядре Windows NT 6.0 / 6.1 какие-либо настройки, которые позволяют быстрее загружать рабочие наборы процессов обратно в оперативную память?
Рассматриваемая программа считывает файл размером 1,5 ГБ в буфер с ограниченным доступом на 1,5 ГБ, выполняет небольшую обработку в течение минуты, а затем завершает работу.
Во время работы все остальные программы выгружаются на диск, как и ожидалось. Когда программа завершается, программы не возвращаются обратно. Даже если я буду ждать несколько часов, их не вернут. Это означает, что, когда я прихожу и пытаюсь использовать свой компьютер, он долго мучительно медлителен, в то время как он медленно возвращает каждый процесс обратно, когда я его использую.
Оно появляется, когда процесс завершен, количество «кэшированной» памяти, отображаемое диспетчером задач, очень велико, а количество «свободной» очень мало. Каждый запущенный процесс использует только 1 или 2 МБ «рабочего набора», тогда как у них есть нормальный размер «размера фиксации», что означает, что большинство их страниц находится на диске.
Мне кажется, что Windows использует оперативную память для дискового кеша, чтобы сохранить мой большой файл размером 1,5 ГБ на тот случай, если я захочу его перечитать (чего я не делаю), вместо того, чтобы возвращать свои обычные процессы. Есть ли способ принудить этот баланс к процессам и от дискового кеша?
Когда программа завершается, программы не возвращаются обратно. Даже если я буду ждать несколько часов, их не вернут.
Windows не возвращает память для других процессов до тех пор, пока эти страницы не будут их использовать. Нет никаких параметров (о которых я знаю), которые заставили бы страницы возвращаться на страницу до тех пор, пока на эти страницы не будут ссылаться.
Если бы он делал это, он часто тратил бы время и подкачку ОЗУ на вещи, которые вы в конечном итоге не используете. Предположим, у вас есть пять процессов, которые в основном выгружены. Кого он должен вернуть? Предположить? Всего понемногу? Или подождать, пока вы начнете использовать один, а затем освободить для него как можно больше оперативной памяти?
Мне кажется, что Windows использует оперативную память для дискового кеша, чтобы сохранить мой большой файл размером 1,5 ГБ на тот случай, если я захочу его перечитать (чего я не делаю), вместо того, чтобы возвращать свои обычные процессы.
Windows, особенно более новые версии, активно использует избыточную оперативную память для кэширования «горячих» файлов, но это никогда не происходит за счет программ, которым требуется оперативная память. Эти страницы быстро приносятся в жертву другим процессам, которым требуется память. Это быстро, потому что страницы дискового кэша не нужно выгружать в файл подкачки. Они просто переназначаются в адресное пространство процесса, который в этом нуждается.
(И я искренне сомневаюсь, что файл размером 1,5 ГБ, который был открыт один раз, переходит в «горячий» статус.)
Это означает, что, когда я прихожу и пытаюсь использовать свой компьютер, он долго мучительно медлителен, в то время как он медленно возвращает каждый процесс обратно, когда я его использую.
Мне кажется, что все работает нормально, но вы можете добавить больше ОЗУ или, возможно, перейти на более быстрый диск.
Если вы все еще считаете что-то подозрительным, опубликуйте более конкретную информацию, например, какую версию Windows вы используете, сколько оперативной памяти у машины и т. Д.
Вы можете передавать подсказки CreateFile
чтобы предположить, что Windows не кэширует файл. Это, в первую очередь, помешает ему выгружать другие процессы.