다음을 통해 공유


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

프로세스의 최소 작업 집합 크기(바이트)입니다. 가상 메모리 관리자는 프로세스가 활성화 될 때마다 프로세스에 적어도이 많은 메모리 상주 유지 하려고 합니다.

이 매개 변수는 0보다 크지만 최대 작업 집합 크기보다 작거나 같아야 합니다. 기본 크기는 50페이지입니다(예: 4K 페이지 크기의 시스템에서는 204,800바이트). 값이 0보다 크지만 20페이지 미만이면 최소값은 20페이지로 설정됩니다.

dwMinimumWorkingSetSizedwMaximumWorkingSetSize 모두 값(SIZE_T)-1이면 함수는 지정된 프로세스의 작업 집합에서 가능한 한 많은 페이지를 제거합니다.

[in] dwMaximumWorkingSetSize

프로세스의 최대 작업 집합 크기(바이트)입니다. 가상 메모리 관리자는 프로세스가 활성 상태이고 사용 가능한 메모리가 부족할 때마다 프로세스에 이 많은 메모리를 유지하려고 시도합니다.

이 매개 변수는 13페이지(예: 4K 페이지 크기의 시스템에서 53,248페이지)보다 크거나 같아야 하며 시스템 전체 최대값(사용 가능한 페이지 수에서 512페이지를 뺀 페이지 수)보다 작아야 합니다. 기본 크기는 345페이지입니다(예: 4K 페이지 크기의 시스템에서는 1,413,120바이트).

dwMinimumWorkingSetSizedwMaximumWorkingSetSize 모두 값(SIZE_T)-1이면 함수는 지정된 프로세스의 작업 집합에서 가능한 한 많은 페이지를 제거합니다. 자세한 내용은 설명을 참조하세요.

[in] Flags

최소 및 최대 작업 집합 크기의 적용을 제어하는 플래그입니다.

의미
QUOTA_LIMITS_HARDWS_MIN_DISABLE
0x00000002
메모리 요구 사항이 높은 경우 작업 집합이 최소 작업 집합 제한보다 낮을 수 있습니다.

이 플래그는 QUOTA_LIMITS_HARDWS_MIN_ENABLE 사용할 수 없습니다.

QUOTA_LIMITS_HARDWS_MIN_ENABLE
0x00000001
작업 집합이 최소 작업 집합 제한보다 낮지 않습니다.

이 플래그는 QUOTA_LIMITS_HARDWS_MIN_DISABLE 사용할 수 없습니다.

QUOTA_LIMITS_HARDWS_MAX_DISABLE
0x00000008
메모리가 풍부한 경우 작업 집합이 최대 작업 집합 제한을 초과할 수 있습니다.

이 플래그는 QUOTA_LIMITS_HARDWS_MAX_ENABLE 사용할 수 없습니다.

QUOTA_LIMITS_HARDWS_MAX_ENABLE
0x00000004
작업 집합이 최대 작업 집합 제한을 초과하지 않습니다.

이 플래그는 QUOTA_LIMITS_HARDWS_MAX_DISABLE 사용할 수 없습니다.

반환 값

함수가 성공하면 반환 값은 0이 아닌 값입니다.

함수가 실패하면 반환 값은 0입니다. 확장 오류 정보를 가져오려면 GetLastError를 호출합니다. 함수가 실패하면 반환 값은 0입니다. 확장 오류 정보를 가져오려면 GetLastError를 호출합니다.

설명

프로세스의 작업 집합은 현재 실제 메모리에 상주하는 프로세스의 가상 주소 공간에 있는 메모리 페이지 집합입니다. 이러한 페이지는 애플리케이션에서 페이지 오류를 트리거하지 않고 사용할 수 있습니다. 페이지 오류에 대한 자세한 내용은 작업 집합을 참조하세요. 최소 및 최대 작업 세트 크기는 프로세스의 가상 메모리 페이징 동작에 영향을 줍니다.

최소 및 최대 작업 집합 크기 모두에 대해 값(SIZE_T)-1을 지정하여 지정된 프로세스의 작업 집합을 비울 수 있습니다. 이렇게 하면 작업 집합에서 가능한 한 많은 페이지가 제거됩니다. 이 용도로 EmptyWorkingSet 함수를 사용할 수도 있습니다.

dwMinimumWorkingSetSize 또는 dwMaximumWorkingSetSize 값이 프로세스의 현재 작업 집합 크기보다 크면 지정된 프로세스에 SE_INC_WORKING_SET_NAME 권한이 있어야 합니다. 모든 사용자는 일반적으로 이 권한을 갖습니다. 보안 권한에 대한 자세한 내용은 권한을 참조하세요.

Windows Server 2003: 지정된 프로세스에는 SE_INC_BASE_PRIORITY_NAME 권한이 있어야 합니다. 관리자 및 전원 사용자 그룹의 사용자는 일반적으로 이 권한을 갖습니다.

운영 체제는 선착순으로 작업 집합 크기를 할당합니다. 예를 들어 애플리케이션이 64메가바이트 시스템의 최소 작업 집합 크기로 40MB를 성공적으로 설정하고 두 번째 애플리케이션이 40메가바이트 작업 집합 크기를 요청하는 경우 운영 체제는 두 번째 애플리케이션의 요청을 거부합니다.

기본적으로 SetProcessWorkingSetSize 함수를 사용하여 애플리케이션의 최소 및 최대 작업 집합 크기를 설정한다고 해서 요청된 메모리가 예약되거나 항상 상주한다는 보장은 없습니다. 애플리케이션이 유휴 상태이거나 메모리 부족 상황에서 메모리 수요가 발생하는 경우 운영 체제는 애플리케이션의 작업 집합을 최소 작업 집합 제한 이하로 줄일 수 있습니다. 메모리가 풍부한 경우 시스템에서 애플리케이션이 최대 작업 집합 제한을 초과하도록 허용할 수 있습니다. QUOTA_LIMITS_HARDWS_MIN_ENABLEQUOTA_LIMITS_HARDWS_MAX_ENABLE 플래그를 사용하면 제한이 적용되는지 확인할 수 있습니다.

애플리케이션의 작업 집합 크기를 늘리면 시스템의 나머지 부분으로부터 실제 메모리를 제거하게 됩니다. 이렇게 하면 다른 애플리케이션 및 시스템 전체의 성능이 저하 될 수 있습니다. 또한 실제 메모리가 있어야 하는 작업(예: 프로세스, 스레드 및 커널 풀 만들기)이 실패할 수 있습니다. 따라서 SetProcessWorkingSetSize 함수를 신중하게 사용해야 합니다. 애플리케이션을 디자인할 때는 항상 전체 시스템의 성능을 고려해야 합니다.

애플리케이션은 VirtualLock 함수를 사용하여 메모리에서 애플리케이션의 가상 주소 공간 범위를 잠글 수 있습니다. 그러나 이는 잠재적으로 시스템의 성능을 저하시킬 수 있습니다.

요구 사항

요구 사항
지원되는 최소 클라이언트 Windows Vista [데스크톱 앱 | UWP 앱]
지원되는 최소 서버 Windows Server 2003 [데스크톱 앱 | UWP 앱]
대상 플랫폼 Windows
헤더 memoryapi.h(Windows Vista, Windows 7, Windows Server 2008 Windows Server 2008 R2의 Windows.h 포함)
라이브러리 onecore.lib
DLL Kernel32.dll

참고 항목

GetProcessWorkingSetSizeEx

프로세스 작업 집합

프로세스 및 스레드 함수

프로세스

VirtualLock

작업 집합