| 发表于:2007-06-08 21:54:07 楼主 |
问题是这样的: 我先创建了一个单文档应用程序,这个程序的作用是处理图像, 首先要把图像载入视图,但是如果图片尺寸太大而视图显示不开的话, 那么就要用到滚动条了,但是,用了滚动条问题就来了, 就是在按下滚动条的箭头时,一直按不松开,我发现内存使用率迅速上升!!直到达到100% 注意是内存使用率上升,而不是cpu使用率,cpu使用率变化不大, 如果中途松开,那么内存使用率将停止增长,但是也不会下降, 但是退出程序后,内存使用率将下降到正常位置, 我现在大概知道是什么原因造成的,肯定是按住滚动条的箭头时不停的调用ondraw()函数, 而ondraw()函数中不停的生成一些变量,而且是非常大的变量,生成后没有释放,所以造成这个结果, 我也知道应该释放这些内存,可是我不知道的是应该怎么释放????? ondraw()函数中添加代码如下: void cmyscrollview::ondraw(cdc* pdc) { cscrolldoc* pdoc = getdocument(); assert_valid(pdoc); // todo: add draw code for native data here //********************************************************************* //以下是添加的内容: if(getdocument()-> getpathname()!= " ") //判断用户是否打开了磁盘上的文件 { hbitmap bitmap; bitmap=(hbitmap)::loadimage(afxgetinstancehandle(), getdocument()-> getpathname(), image_bitmap,0,0, lr_loadfromfile ¦lr_createdibsection); hbitmap oldbitmap; cdc memdc; memdc.createcompatibledc(pdc); crect rect; getclientrect(&rect); oldbitmap=(hbitmap)memdc.selectobject(bitmap); pdc-> bitblt(0,0,rect.width(),rect.height(),&memdc,0,0,srccopy); //绘制位图 } //********************************************************************************** } 在 void cmyscrollview::oninitialupdate() { cscrollview::oninitialupdate(); csize sizetotal; // todo: calculate the total size of this view sizetotal.cx = sizetotal.cy = 10000; setscrollsizes(mm_text, sizetotal); //********************************************** //以下是添加的内容: getparentframe()-> recalclayout(); resizeparenttofit(); //********************************************** } 高手们赐教呀!!! |
|
|
|
|