CxImage의 MakeBitmap를 잘못 사용하면 페이지파일(PF), 메모리 사용량이 늘어난다.
MFC&ActiveX 2010. 1. 1. 23:29 |
MFC의 Dialog 베이스를 사용해서 폼을 하나 제작합니다.
그리고 picture Box 를 하나 제작한 후에 CxImage를 사용해서 png 파일을 하나 로드 한후에
picture Box에 SetBitmap 를 하고 나서 이걸 다른 형태로 테스트를 진행해 봤습니다.
기본 코드는 아래와 같아요.
// CxImage 객체 생성
m_pImage = new CxImage("D:\\Test.png", CXIMAGE_FORMAT_PNG);
// PictureBox 컨트롤에 CxImage 이미지 연동
m_pic.SetBitmap( m_pImage->MakeBitmap() );
이렇게 하고 나서 실행 하고, 종료 하게 되면 크게 문제는 안되는듯 하다.
이걸 다른 형태로 테스트를 해봤다.
타이머를 통해서 CxImage 객체 두개의 Bitmap를 m_pic(PictureBox) 컨트롤에 SetBitmap를 반복해서 처리해봤다.
void CPngToBitmapDlg::OnTimer(UINT nIDEvent)
{
static bool bFirst = false;
static HBITMAP hBitmap = NULL;
if( bFirst == false )
{
hBitmap = m_pic.SetBitmap( m_pImage2->MakeBitmap() );
}
else
{
hBitmap = m_pic.SetBitmap( m_pImage->MakeBitmap() );
}
::DeleteObject( hBitmap );
//
bFirst = !bFirst;
m_loopCount++;
UpdateData(false);
CDialog::OnTimer(nIDEvent);
}
위의 붉은색 코드를 하지 않고 계속해서 SetBitmap을 하게 되면
페이지파일(PF)가 계속 증가 하는 것을 볼 수 있다.
앞으로 코드 구현을 할때 하나 하나 단위테스트를 통해서 반복적인 메모리 및 GDI 사용량 등을
체크 하고 좀 안정성 있는 프로그램을 하도록 해야 할거 같다.