写了个函数显示一个图片,可是当反复调用的时候内存很快就以每秒4K的速度上升
不知道是那个东西没有释放,谁帮我看看啊!
其中p是存储图片的缓冲区,他是固定大小的,不影响内存第一次发帖,分少,大家帮帮忙啊HBITMAP hBitmap;
void* bmpInfoAdd=(void*)((int)p+14);
CClientDC dc(this);
hBitmap=CreateDIBitmap(dc.m_hDC,(BITMAPINFOHEADER*)bmpInfoAdd,CBM_INIT,bmpInfoAdd, (BITMAPINFO*)bmpInfoAdd,DIB_RGB_COLORS);
CWnd* cwnd = GetDlgItem(IDC_STATIC); HBITMAP OldBitmap;
CDC MemDC;
MemDC.CreateCompatibleDC(cwnd->GetDC());
OldBitmap=(HBITMAP)MemDC.SelectObject(hBitmap);
cwnd->GetDC()->BitBlt(0,0,600,400,&MemDC,0,0,SRCCOPY);
MemDC.SelectObject(OldBitmap); DeleteObject(hBitmap);
DeleteObject(OldBitmap);
MemDC.DeleteDC();
dc.DeleteDC();
不知道是那个东西没有释放,谁帮我看看啊!
其中p是存储图片的缓冲区,他是固定大小的,不影响内存第一次发帖,分少,大家帮帮忙啊HBITMAP hBitmap;
void* bmpInfoAdd=(void*)((int)p+14);
CClientDC dc(this);
hBitmap=CreateDIBitmap(dc.m_hDC,(BITMAPINFOHEADER*)bmpInfoAdd,CBM_INIT,bmpInfoAdd, (BITMAPINFO*)bmpInfoAdd,DIB_RGB_COLORS);
CWnd* cwnd = GetDlgItem(IDC_STATIC); HBITMAP OldBitmap;
CDC MemDC;
MemDC.CreateCompatibleDC(cwnd->GetDC());
OldBitmap=(HBITMAP)MemDC.SelectObject(hBitmap);
cwnd->GetDC()->BitBlt(0,0,600,400,&MemDC,0,0,SRCCOPY);
MemDC.SelectObject(OldBitmap); DeleteObject(hBitmap);
DeleteObject(OldBitmap);
MemDC.DeleteDC();
dc.DeleteDC();
解决方案 »
- 我编写的网卡禁用/启用程序为什么在XP下正常运行在win7下却不起作用?
- 用CInternetSession和查看-->源文件,得到的网页内容为什么不一样呢?
- MFC中如何treeview背景透明
- 高分求助,VC关于xml文件的生成和对xml文件的解析(有附件)
- 请问一个问题:在一个线程里边用到Windows精确定时函数QueryPerformanceFrequency和QueryPerformanceCounter会不会出现问题?
- 奇怪的内存问题
- socket建立后如何获得客户端的地址和端口号?
- 新手上路,请教一个界面最大化问题,在线等,谢谢!
- 窗口字体变形
- 多文档视图左上角的MFC图标怎样取掉?
- 帮偶看下这个IPC编程的错怎么改
- CPropertySheet中的窗口资源切换问题
换成
dc.BitBlt(....)
看看这样行不行~~
如果不行的话,那问题可能出在图片上如果你这函数要经常使用的话
hBitmap 定义为类中的成员变量,在类的构造函数里载入,在析构函数里释放
这样就不用贫乏读图了。不过这些 GDI 操作我觉得都很复杂,自己总觉得所有代码都已经优化得最好了
但每次都会看到在调用函数的时候内存都增加...
就是那个CDC MemDC;搞的鬼,如果注掉BitBlt的那些话,只留这个CDC的话内存一样飙升,大哥
你知道这个CDC是怎么回事吗?
不过程序刚开始运行的时候内存还是会有一点的波动,后来就稳定了。