Поделиться через


Функция SetProcessWorkingSetSize (memoryapi.h)

Задает минимальный и максимальный размер рабочего набора для указанного процесса.

Синтаксис

BOOL SetProcessWorkingSetSize(
  [in] HANDLE hProcess,
  [in] SIZE_T dwMinimumWorkingSetSize,
  [in] SIZE_T dwMaximumWorkingSetSize
);

Параметры

[in] hProcess

Дескриптор для процесса, размеры рабочего набора которого должны быть заданы.

Дескриптор должен иметь право доступа PROCESS_SET_QUOTA . Дополнительные сведения см. в разделе Управление правами на доступ и безопасность процесса.

[in] dwMinimumWorkingSetSize

Минимальный размер рабочего набора для процесса в байтах. Диспетчер виртуальной памяти пытается сохранить в процессе по крайней мере такой объем памяти, когда процесс активен.

Этот параметр должен быть больше нуля, но меньше или равен максимальному размеру рабочего набора. Размер по умолчанию составляет 50 страниц (например, это 204 800 байт в системах с размером страницы 4K). Если значение больше нуля, но меньше 20 страниц, минимальное значение равно 20 страницам.

Если и dwMinimumWorkingSetSize , и dwMaximumWorkingSetSize имеют значение (SIZE_T)–1, функция удаляет как можно больше страниц из рабочего набора указанного процесса.

[in] dwMaximumWorkingSetSize

Максимальный размер рабочего набора для процесса в байтах. Диспетчер виртуальной памяти пытается сохранить в процессе не более этого объема памяти, когда процесс активен и имеет мало доступной памяти.

Этот параметр должен быть больше или равен 13 страницам (например, 53 248 в системах с размером страницы 4K) и меньше максимального значения для всей системы (количество доступных страниц минус 512 страниц). Размер по умолчанию составляет 345 страниц (например, это 1 413 120 байт в системах с размером страницы 4K).

Если и dwMinimumWorkingSetSize , и dwMaximumWorkingSetSize имеют значение (SIZE_T)–1, функция удаляет как можно больше страниц из рабочего набора указанного процесса.

Возвращаемое значение

Если функция выполняется успешно, возвращается ненулевое значение.

Если функция выполняется неудачно, возвращается нулевое значение. Вызовите Метод GetLastError , чтобы получить расширенные сведения об ошибке.

Комментарии

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

Рабочий набор указанного процесса можно очистить, указав значение (SIZE_T)–1 для минимального и максимального размеров рабочего набора. При этом из рабочего набора удаляется как можно больше страниц. Для этой цели также можно использовать функцию EmptyWorkingSet .

Если значения dwMinimumWorkingSetSize или dwMaximumWorkingSetSize больше текущих размеров рабочего набора процесса, указанный процесс должен иметь SE_INC_WORKING_SET_NAME привилегию. Все пользователи, как правило, имеют эту привилегию. Дополнительные сведения о привилегиях безопасности см. в разделе Привилегии.

Windows Server 2003 и Windows XP: Указанный процесс должен иметь привилегию SE_INC_BASE_PRIORITY_NAME . Пользователи в группах "Администраторы" и "Опытные пользователи", как правило, имеют эту привилегию.

Операционная система выделяет размеры рабочих наборов в порядке очереди. Например, если приложение успешно задает 40 мегабайт в качестве минимального размера рабочего набора в системе размером 64 МБ, а второе приложение запрашивает размер рабочего набора в 40 МБ, операционная система отклоняет запрос второго приложения.

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

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

Требования

   
Минимальная версия клиента Windows XP [только классические приложения]
Минимальная версия сервера Windows Server 2003 [только классические приложения]
Верхняя часть memoryapi.h
Библиотека onecore.lib
DLL Kernel32.dll

См. также

GetProcessWorkingSetSize

Рабочий набор процессов

Функции процессов и потоков

Процессы

SetProcessWorkingSetSizeEx

VirtualLock