출처 : http://soyokaze.egloos.com/900499/
하여튼 왜 이런 현상이 발생하는지는 모르고 있다가 Eclipse와 Firefox의 Swapping 문제라는 글에서 원인을 발견했다. 이 글의 중반 쯤의 링크에 보면 PRB: An Application's Working Set Is Trimmed When Its Top-Level Window Is Minimized 라 는 MS의 KB 문서가 있다. 이를 보면, Windows는 ShowWindow API에 SW_MINIMIZE 파라미터를 통해 프로그램을 최소화 하는 경우 프로그램의 워킹 셋 (물리적 메모리 - RAM 에 현재 기록되어 있는 메모리 페이지) 을 줄여버린다는 것이다. 플로우 상으로는 ShowWindow API를 SW_MINIMIZE 파라미터를 통해 콜하면(또는 WM_SYSCOMMAND에 SC_MINIMIZE 파라미터로 메시지를 전달하는 경우) 기본 윈도우 프로시저 - DefWindowProc 가 불려지고 여기에서 SetProcessWorkingSetSize API에 파라미터를 -1, -1로 넘겨서 워킹 셋을 완전히 날려버린다. 아, 시도한다는 말이 맞을 듯..
MS KB 에서는 이 점에 대한 해결책도 제시하고 있는데, ShowWindow API 사용지 SW_MINIMIZE 대신 SW_SHOWMINIMIZED를 사용하면 된다고 한다. WM_SYSCOMMAND를 통해 최소화 시에는 WM_SYSCOMMAND 메시지 처리 시 해당 메시지의 WPARAM이 SC_MINIMIZE 인 경우 ShowWindow API를 콜하고 (물론 SW_SHOWMINIMIZED 파라미터로) 리턴해 버리면 된다.
참, 위의 이야기는 모두 Windows NT 계열 이상에서의 이야기이다. ^^
'Development > 삽질의 추억' 카테고리의 다른 글
Warning C4748, C4742 (0) | 2012.02.07 |
---|---|
윈도우 XP에서 윈도우7 공유폴더 접근 안 될때 (0) | 2011.08.30 |
VB에서 파일 수정일자 가져오는 함수 (0) | 2011.08.13 |
VB에서 쿼리 실행할 때 - 시간 제한이 만료되었습니다. (0) | 2011.08.13 |
VB 에서 Signed 데이터 Unsigned로 변환하기 (0) | 2011.08.13 |
