Можно ли вручную отправлять программы в виртуальную память в Windows?

Можно ли вручную отправлять программы в виртуальную память в Windows?

Если у вас много открытых программ, и ваша машина слишком сильно использует память/процессор, вы можете закрыть программу, не теряя ее состояния (отправив ее в виртуальную память), а затем возобновить программу позже. Это автоматически делается ОС, но ОС не знает, на сколько времени вы хотите приостановить свою программу, поэтому в конечном итоге она становится очень медленной, пытаясь сохранить части каждой программы в памяти и переместить другие части в виртуальную память. Ручная отправка всей программы в виртуальную память и затем извлечение ее в том же состоянии, когда это необходимо, была бы хорошей функцией, есть ли какой-либо инструмент для этого? или его можно написать?

решение1

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

То, что вы просите, это возможность принудительно выгрузить программу. Напрямую это сделать невозможно.

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

Этого не происходит. Страницы памяти, к которым не осуществляется доступ, всегда доступны для освобождения для других целей (и записи на диск по мере необходимости); ОС не «пытается сохранить части каждой программы» в памяти независимо от того, осуществляется ли к ним доступ. Если к ним не осуществляется доступ, что обычно происходит с частными страницами бездействующей программы, они будут оставаться в памяти только до тех пор, пока не возникнет давление, вызванное потребностями других программ. (До тех пор нет смысла выгружать их, верно?)

В Windows XP сворачивание окна приложения приводило к очистке рабочего набора, но я думаю, что XP была последней версией, где это было актуально.

Если вы действительно хотите это сделать, вы можете использовать VMmapинструмент SysInternals. При запуске он попросит вас выбрать процесс. Сделайте это, затем выберите View | Empty Working Set.

Однако следует отметить, что это освобождает страницы только в измененном или резервном списке страниц. (И это только для страниц, которые не находятся в рабочих наборах других процессов.) Страницы, перемещенные в измененный список, будут записаны в файл подкачки, а затем перемещены в резервный список. Страницы в резервном списке считаются «доступными», но пока они не будут перепрофилированы для какого-либо другого использования, они по-прежнему будут содержать содержимое из исходного процесса.

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

Полные подробности, конечно, в главе «Управление памятью»Внутреннее устройство WindowsСоломон, Руссинович и Ионеску.

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