Windows 10 이상 환경에서 GDI Object(GDI 객체 또는 GDI 개체) 수의 한계를 조정할 필요가 생겨 알아보게 된 내용을 정리한다.
GDI(Graphic Device Interface)란?
GDI는 Graphic Device Interface의 약자로, 화면과 같은 모든 출력 장치를 제어하는 인터페이스이다. 화면 그래픽을 출력하기 위해 사용되는 도구를 GDI Object라고 하며 브러쉬, 텍스트(폰트), 그림(비트맵) 등이 포함된다. GDI Object는 DC(Device Context)에 담겨 있으며 사용자는 DC에서 원하는 내용을 변경하여 출력한다. (GetDC, BeginPaint 등의 함수를 이용하여 DC 생성, 핸들 얻어 사용하는 방식)
말이 어려운데 .. 음. 단순하게 말하면
Window 환경에서 어떤 작업을 수행하면 모니터라는 GUI 환경에서 그래픽 형태로 사용자에게 보여지게 되고, 이때 GDI 오브젝트를 통해 리소스를 사용하게 된다. 그리고 이 리소스는 메인 메모리와 다른 영역인 Heap에 저장됨!
힙(Heap) 메모리 크기와 GDI Object 수는 제한되어 있고, Window 상에서 한 번에 많은 리소스를 사용하는 경우 버벅이거나 강제 종료될 수 있음
GDI Object 설정
GDIProcessHandleQuota, USERProcessHandleQuota 두 값을 수정하여 GDI Object 한계값을 수정할 수 있다. 브라우저나 기타 그래픽 어플리케이션 등 GUI 작업이 과도한 경우 Window의 GDI 리소스가 넘쳐 어플리케이션이 버벅이거나 화면이 표시되지 않는 문제가 발생할 수 있는데, 이럴 때 해결 방법으로 사용 가능하다.
설정 방법은 Window의 [레지스트리 편집기]를 실행하여 GDIProcessHandleQuota, USERProcessHandleQuota 설정을 원하는 값으로 변경해주면 된다. 변경 후에는 PC를 재시작해야 정상 적용됨.
1) GDIProcessHandleQuota
범위 256-65536 기본값 10000
- HKEY_LOCAL_MACHINE > SOFTWARE > Microsoft > Windows NT > CurrentVersion > Windows > GDIProcessHandleQuota
2) USERProcessHandleQuota
범위 200-18000 기본값 10000
- HKEY_LOCAL_MACHINE > SOFTWARE > Microsoft > Windows NT > CurrentVersion > Windows > USERProcessHandleQuota
다만, 두 값을 기본 수치인 10,000보다 높게 설정한다고 해도 GDI Object는 Heap 영역에 생성되기 때문에 Window 자체의 Heap 영역이 크게 할당되어 있지 않다면 의미없는...게 될수도.
(참고) Window Heap 제한 해제 방법은 다음과 같다.
데스크톱 힙 제한으로 인해 메모리 부족 오류 발생 - Windows Server
이 문서에서는 데스크톱 힙 제한 사항에 대해 설명하고 데스크톱 힙 크기를 수정하는 방법을 제공합니다.
learn.microsoft.com