CRect rect;
....
CBitmap bmpFace;
bmpFace.CreateCompatibleBitmap(pDC,rect.Width(),rect.Height());
CBitmap* pOldBmp = NULL;
pOldBmp = MemDC.SelectObject(&bmpFace);;
pDC->BitBlt(rect.left,rect.top,rect.Width(),rect.Height(),&MemDC,rect.left,rect.top,SRCCOPY);
....
请问,当rect较大(大于一个临界值)时,BitBlt的速度会突然明显下降,为什么??

解决方案 »

  1.   

    http://expert.csdn.net/Expert/topic/1255/1255117.xml?temp=.1675836
      

  2.   

    to demetry:
      看了。但是还是不知道。里面好像没有谈到缓冲区大小的问题。
    能否说具体一点。谢谢。
      

  3.   

    to jemmylau
    能否详细一点。
    我的程序中有几个CBitmap对象,需要时就将它选入MemDC中,再BitBlt。
    CBitmap对象大于一个值时,速度就突然下降:-(。CBitmap对象越多,那个临界值就越小。
    why,why,why?Who can help me???
      

  4.   

    哪位能给出一个原理吗?
    我认为可能不是显存问题。
    CBITMAP里面的对象应该是存在系统内存当中的。
    假如BITMAP太大的话,就会占用比较大的系统内存空间。
    BITBLT的时候,画面也有可能是存在系统内存的,
    而系统内存本来就不会很多,可能牵涉到很多的内存分页呀,
    还有时候会把一部分不用的暂时移到硬盘上去,
    我猜这个临界值大概是16M左右,大家谁来试试看,因为系统最多可能是36M左右。
      

  5.   

    to seventcat:
      我试了一下,这个值大概有10M。如果原因真的如你所说,有什么方法改进吗??
      

  6.   

    没有办法,系统限制,建议还是用DIB好了,DIB的内存是用户内存。
      

  7.   

    建议使用ShowDib函数显示256色及以上位图
      

  8.   

    如果要求高性能的话但当然要使用DirectX