Функция 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 байт в системах с размером страницы размером 4 КБ). Если значение больше нуля, но меньше 20 страниц, минимальное значение равно 20 страницам.

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

[in] dwMaximumWorkingSetSize

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

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

Если оба 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 . Пользователи в группах "Администраторы" и "Пользователи Power Users" обычно имеют эту привилегию.

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

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

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

Требования

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

См. также

GetProcessWorkingSetSize

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

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

Процессы

SetProcessWorkingSetSizeEx

VirtualLock