SetProcessWorkingSetSize 함수(memoryapi.h)
지정된 프로세스의 최소 및 최대 작업 집합 크기를 설정합니다.
구문
BOOL SetProcessWorkingSetSize(
[in] HANDLE hProcess,
[in] SIZE_T dwMinimumWorkingSetSize,
[in] SIZE_T dwMaximumWorkingSetSize
);
매개 변수
[in] hProcess
작업 집합 크기를 설정할 프로세스에 대한 핸들입니다.
핸들에 PROCESS_SET_QUOTA 액세스 권한이 있어야 합니다. 자세한 내용은 프로세스 보안 및 액세스 권한을 참조하세요.
[in] dwMinimumWorkingSetSize
프로세스의 최소 작업 집합 크기(바이트)입니다. 가상 메모리 관리자는 프로세스가 활성화 될 때마다 프로세스에 적어도이 많은 메모리 상주 유지 하려고 합니다.
이 매개 변수는 0보다 크지만 최대 작업 집합 크기보다 작거나 같아야 합니다. 기본 크기는 50페이지입니다(예: 4K 페이지 크기의 시스템에서는 204,800바이트). 값이 0보다 크지만 20페이지 미만이면 최소값은 20페이지로 설정됩니다.
dwMinimumWorkingSetSize와 dwMaximumWorkingSetSize 모두 값(SIZE_T)-1이면 함수는 지정된 프로세스의 작업 집합에서 가능한 한 많은 페이지를 제거합니다.
[in] dwMaximumWorkingSetSize
프로세스의 최대 작업 집합 크기(바이트)입니다. 가상 메모리 관리자는 프로세스가 활성 상태이고 사용 가능한 메모리가 부족할 때마다 프로세스에 이 많은 메모리를 유지하려고 시도합니다.
이 매개 변수는 13페이지(예: 4K 페이지 크기의 시스템에서 53,248페이지)보다 크거나 같아야 하며 시스템 전체 최대값(사용 가능한 페이지 수에서 512페이지를 뺀 페이지 수)보다 작아야 합니다. 기본 크기는 345페이지입니다(예: 4K 페이지 크기의 시스템에서는 1,413,120바이트).
dwMinimumWorkingSetSize와 dwMaximumWorkingSetSize 모두 값(SIZE_T)-1이면 함수는 지정된 프로세스의 작업 집합에서 가능한 한 많은 페이지를 제거합니다.
반환 값
함수가 성공하면 반환 값이 0이 아닙니다.
함수가 실패하면 반환 값은 0입니다. GetLastError를 호출하여 확장된 오류 정보를 가져옵니다.
설명
프로세스의 작업 집합은 현재 실제 메모리에 상주하는 프로세스의 가상 주소 공간에 있는 메모리 페이지 집합입니다. 이러한 페이지는 애플리케이션에서 페이지 오류를 트리거하지 않고 사용할 수 있습니다. 페이지 오류에 대한 자세한 내용은 작업 집합을 참조하세요. 최소 및 최대 작업 세트 크기는 프로세스의 가상 메모리 페이징 동작에 영향을 줍니다.
최소 및 최대 작업 집합 크기 모두에 대해 값(SIZE_T)-1을 지정하여 지정된 프로세스의 작업 집합을 비울 수 있습니다. 이렇게 하면 작업 집합에서 가능한 한 많은 페이지가 제거됩니다. 이 용도로 EmptyWorkingSet 함수를 사용할 수도 있습니다.
dwMinimumWorkingSetSize 또는 dwMaximumWorkingSetSize 값이 프로세스의 현재 작업 집합 크기보다 크면 지정된 프로세스에 SE_INC_WORKING_SET_NAME 권한이 있어야 합니다. 모든 사용자는 일반적으로 이 권한을 갖습니다. 보안 권한에 대한 자세한 내용은 권한을 참조하세요.
Windows Server 2003 및 Windows XP: 지정된 프로세스에는 SE_INC_BASE_PRIORITY_NAME 권한이 있어야 합니다. 관리자 및 전원 사용자 그룹의 사용자는 일반적으로 이 권한을 갖습니다.
운영 체제는 선착순으로 작업 집합 크기를 할당합니다. 예를 들어 애플리케이션이 64메가바이트 시스템의 최소 작업 집합 크기로 40MB를 성공적으로 설정하고 두 번째 애플리케이션이 40메가바이트 작업 집합 크기를 요청하는 경우 운영 체제는 두 번째 애플리케이션의 요청을 거부합니다.
SetProcessWorkingSetSize 함수를 사용하여 애플리케이션의 최소 및 최대 작업 집합 크기를 설정한다고 해서 요청된 메모리가 예약되거나 항상 상주한다는 보장은 없습니다. 애플리케이션이 유휴 상태이거나 메모리 부족 상황에서 메모리 수요가 발생하는 경우 운영 체제는 애플리케이션의 작업 집합을 줄일 수 있습니다. 애플리케이션은 VirtualLock함수를 사용하여 메모리에서 애플리케이션의 가상 주소 공간 범위를 잠글 수 있습니다. 그러나 이는 잠재적으로 시스템의 성능을 저하시킬 수 있습니다.
애플리케이션의 작업 집합 크기를 늘리면 시스템의 나머지 부분으로부터 실제 메모리를 제거하게 됩니다. 이렇게 하면 다른 애플리케이션 및 시스템 전체의 성능이 저하 될 수 있습니다. 또한 실제 메모리가 있어야 하는 작업(예: 프로세스, 스레드 및 커널 풀 만들기)이 실패할 수 있습니다. 따라서 SetProcessWorkingSetSize 함수를 신중하게 사용해야 합니다. 애플리케이션을 디자인할 때는 항상 전체 시스템의 성능을 고려해야 합니다.
요구 사항
지원되는 최소 클라이언트 | Windows XP [데스크톱 앱만 해당] |
지원되는 최소 서버 | Windows Server 2003 [데스크톱 앱만 해당] |
머리글 | memoryapi.h |
라이브러리 | onecore.lib |
DLL | Kernel32.dll |