Функция SetProcessWorkingSetSizeEx (memoryapi.h)
Задает минимальный и максимальный размер рабочего набора для указанного процесса.
Синтаксис
BOOL SetProcessWorkingSetSizeEx(
[in] HANDLE hProcess,
[in] SIZE_T dwMinimumWorkingSetSize,
[in] SIZE_T dwMaximumWorkingSetSize,
[in] DWORD Flags
);
Параметры
[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, функция удаляет как можно больше страниц из рабочего набора указанного процесса. Дополнительные сведения см. в разделе "Заметки".
[in] Flags
Флаги, управляющие применением минимального и максимального размеров рабочего набора.
Возвращаемое значение
Если функция выполнена успешно, возвращаемое значение не равно нулю.
Если функция выполняется неудачно, возвращается нулевое значение. Дополнительные сведения об ошибке можно получить, вызвав GetLastError. Если функция выполняется неудачно, возвращается нулевое значение. Дополнительные сведения об ошибке можно получить, вызвав GetLastError.
Комментарии
Рабочий набор процесса — это набор страниц памяти в виртуальном адресном пространстве процесса, которые в настоящее время находятся в физической памяти. Эти страницы доступны для использования приложением без активации ошибки страницы. Дополнительные сведения об ошибках страниц см. в разделе Рабочий набор. Минимальный и максимальный размеры рабочего набора влияют на режим разбиения на страницы виртуальной памяти процесса.
Рабочий набор указанного процесса можно очистить, указав значение (SIZE_T)–1 для минимального и максимального размеров рабочего набора. При этом из рабочего набора удаляется как можно больше страниц. Для этой цели также можно использовать функцию EmptyWorkingSet .
Если значения dwMinimumWorkingSetSize или dwMaximumWorkingSetSize больше текущих размеров рабочего набора процесса, указанный процесс должен иметь SE_INC_WORKING_SET_NAME привилегию. Все пользователи, как правило, имеют эту привилегию. Дополнительные сведения о привилегиях безопасности см. в разделе Привилегии.
Windows Server 2003: Указанный процесс должен иметь привилегию SE_INC_BASE_PRIORITY_NAME . Пользователи в группах "Администраторы" и "Опытные пользователи", как правило, имеют эту привилегию.
Операционная система выделяет размеры рабочих наборов в порядке очереди. Например, если приложение успешно задает 40 мегабайт в качестве минимального размера рабочего набора в системе размером 64 МБ, а второе приложение запрашивает размер рабочего набора в 40 МБ, операционная система отклоняет запрос второго приложения.
По умолчанию использование функции SetProcessWorkingSetSize для установки минимального и максимального размера рабочего набора приложения не гарантирует, что запрошенная память будет зарезервирована или она будет постоянно находиться. Если приложение неактивно или нехватка памяти вызывает потребность в памяти, операционная система может уменьшить рабочий набор приложения ниже его минимального предела. При наличии большого объема памяти система может позволить приложению превысить максимальное ограничение на рабочий набор. Флаги QUOTA_LIMITS_HARDWS_MIN_ENABLE и QUOTA_LIMITS_HARDWS_MAX_ENABLE позволяют обеспечить соблюдение ограничений.
При увеличении размера рабочего набора приложения вы отнимаете физическую память у остальной части системы. Это может снизить производительность других приложений и системы в целом. Это также может привести к сбоям операций, требующих наличия физической памяти (например, создание процессов, потоков и пула ядра). Поэтому необходимо тщательно использовать функцию SetProcessWorkingSetSize . При проектировании приложения всегда следует учитывать производительность всей системы.
Приложение может использовать функцию VirtualLock для блокировки диапазонов виртуального адресного пространства приложения в памяти; однако это может привести к снижению производительности системы.
Требования
Требование | Значение |
---|---|
Минимальная версия клиента | Windows Vista [классические приложения | Приложения UWP] |
Минимальная версия сервера | Windows Server 2003 [классические приложения | Приложения UWP] |
Целевая платформа | Windows |
Header | memoryapi.h (включает Windows.h в Windows Vista, Windows 7, Windows Server 2008 Windows Server 2008 R2) |
Библиотека | onecore.lib |
DLL | Kernel32.dll |