kyuseo의 게임 프로그래밍

폰트 핸들(HFONT)을 CreateFont로 대량 생성시 리소스 점유 본문

C++ 개발

폰트 핸들(HFONT)을 CreateFont로 대량 생성시 리소스 점유

kyuseo 2007. 11. 2. 13:10

개요..

 

폰트 핸들(HFONT)을 CreateFont로 대량 생성시 리소스 점유에 대하여 알아봅니다.

 

아래와 같이 CreateFont를 활용하여 HFONT를 대량 생성한 결과 별다른 메모리의 증가는 보이지 않았으나 GDI객체 증가가 발견되었습니다. 윈도우 프로그래밍에서 대량의 GDI 객체 사용시 리소스 부족 증상이 간혹 나올 수 있기 때문에   같은 폰트, 같은 크기 사용할 경우 객체의 핸들을 공용으로 사용하면 리소스 사용을 감소 할 수 있습니다.

 

 

코드

 

1. 최초 실행

 

 

 

2. 같은 폰트 같은 크기를 생성시 최초 폰트 생성시 약 500KB 가량의 메모리가 할당되고 GDI 객체가 생성한 개수만큼 증가하였다.

 

    // 같은폰트같은크기를1000개생성한다.

    for( int i=0; i<1000; i++ )

    {

        HFONT hFont = CreateFont(

            20, 0,

            0, 0,

            FW_NORMAL,

            1, 0, 0,

            ANSI_CHARSET,

            OUT_DEFAULT_PRECIS,

            CLIP_DEFAULT_PRECIS,

            DEFAULT_QUALITY,

            DEFAULT_PITCH,

            "MS Sans Serif"

            );

    }

 

 

3. 같은 폰트 틀린 크기를 생성시 최초 폰트 생성시 메모리의 변화는 거의 없고 GDI 객체가 생성한 개수만큼 증가하였다

 

    // 같은폰트틀린크기1000개생성한다.

    for( int i=0; i<1000; i++ )

    {

        HFONT hFont = CreateFont(

            i, 0,

            0, 0,

            FW_NORMAL,

            1, 0, 0,

            ANSI_CHARSET,

            OUT_DEFAULT_PRECIS,

            CLIP_DEFAULT_PRECIS,

            DEFAULT_QUALITY,

            DEFAULT_PITCH,

            "MS Sans Serif"

            );

    }