2

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

1 ответ1

3

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

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

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

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

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

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

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

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

Полную информацию можно найти в главе «Управление памятью» в Windows Internals Соломона, Руссиновича и Ионеску.

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