일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
- 별찍기
- Tipsware
- do it c
- 핵심 요약
- 포트폴리오
- 유료강좌
- win32
- 정보처리기사
- MFC
- visual
- 도움말
- ListBox
- tips강좌
- 마이크로소프트
- MFC 예제
- mfc 실습
- 미가공
- linux
- Time
- SSG
- C++
- C언어
- 충무창업큐브
- 김성엽
- MyTread
- 실습
- 정처기 독학
- C
- mysql
- MyThread
- Today
- Total
History
[Process Explorer] GDI Objects 오류 확인 본문
이 카테고리는 오류 코드가 발생하고 해결하면 쓰려고 만든 곳이지만, 일하다가 이런 경우에 죽을 수도 있구나라는 사실을 알아서 기록용으로 남기려고 한다.
윈도우에서는 프로그램이 실행될 때 할당된 핸들 개수와 GDI Objects의 개수가 존재한다. GDI Objects는OS에서 인식하는 GDI 개체(글꼴, 브러쉬, 펜, 비트맵 등) DC가 UI에 너무 많이 열려있으면 발생할 수 있다.
특정 프로세스의 GDI Objects의 개수를 확인하려면
Process Explorer를 통해 알아보는 방법이 있다. 방법은 추후 기록용으로 올리도록 하겠다.
GDI 개체 수가 10,000에 가까우면 Error -12: Out of Memory 가 발생하고 다른 그래픽 항목을 만들 수 없다.
이러한 버그에 걸리지 않도록 하려면
1. 응용프로그램을 다시 설계하면 된다.
- 이 부분은 쉽게 말해서 지금 구조로는 예외상황이 발생하니 다시 엎고 만들라는 소리이다. 그렇지만 자신이 만든 소스가 아니라 다른 사람이 만든 소스에 심지어 레거시 소스이면 답이 없다.
2. 레지스트리 값을 통해 GDI 핸들 제한을 최대 65.536(64K)로 늘릴 수 있다.
- GDI 핸들의 제한을 관리하는 레지스트리 키 주소는 아래와 같다.
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\WindowsNT\CurrentVersion\Windows\GDIProcessHandleQuota
그러나 레지스트리 키 변경하는것은 운영체제의 손상이 있을 수 있기 때문에 할 거면 파일> 내보내기를 선택하여 기존 레지스트리를 백업해 놓고 작업하는 자세가 필요하다.
그리고 10,000개에서 20,000개로 제한을 완화하면 Windows 자체를 포함하여 나머지 시스템에서 사용할 수 있는 GDI 개체 수가 줄어든다.
결론: 디버그 작업을 진행하는데 가상메모리, HANDLE 개수 초과 등 문제가 발견되지 않는다면 한번쯤은 GDI Objects 쪽을 봐보는 것이 방법이 될 수 있다.
'Visual Studio > Error Resolves' 카테고리의 다른 글
[오류코드] C3861 : _T 식별자를 찾을 수 없습니다. (0) | 2024.03.22 |
---|---|
[오류코드] C1083 (0) | 2023.11.17 |
[오류코드] C2338 (0) | 2023.11.17 |