怎样解决GDI资源不能及时回收的问题?

Sniper 2000-03-13 09:38:00
加精
我作了一个程序,有大量的绘图操作,在运行过程中GDI资源逐渐减少直至程序不能运行,但在程序不能运行之间退出程序,就发现GDI资源回到程序运行前的值。
请教高手后,对几乎每个GDI对象在它被释放之间都强制调用了DeleteObject()方法,以确保GDI资源被及时释放。再次运行程序,发现GDI资源减少速度明显降低,但仍然在减少,可能是上述强制调用没有作全。
在这里我有下列几个问题:
1.GDI资源分配和回收机制是怎样的?
2.DeleteObject()调用是否是必需的?
3.有没有什么办法一次性回收所有已经没用的GDI资源,就象程序退出时所作的一样?
...全文
505 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
Shania 2000-03-15
  • 打赏
  • 举报
回复
倒数第二行打错了,应为:DeleteDC(memdc);
csdn2000 2000-03-15
  • 打赏
  • 举报
回复
这个问题微软在Win98/NT 4.0操作系统本身就没解决,总能奢望程序员呢?
kxy 2000-03-15
  • 打赏
  • 举报
回复
不错,仔细检查自己的程序,我想你的绘图操作不会比PhotoShop还多吧.
BoundsCheck可以检查GDI的泄露
softdoctor 2000-03-15
  • 打赏
  • 举报
回复
使用WINDOWS GDI资源的原则是:自己创建的自己删除
GetDC->ReleseDC
CreateDC->DeleteDC
CreateXXX->DeleteObject()
SelectObject->SelectObject
如果使用API函数,并严格按上面的方式创建\删除很容易做到GDI平衡。
但是如使用MFC,因为MFC封装了上述函数,造成用户不知道是否该显式
的调用DeleteObject。
再利用了上述原则后,如果仍然不行,
解决你的问题方法就是将绘图过程分成若干小段,分段屏蔽,运行时观察
资源查看器,疯狂重画,找出造成GDI资源泄漏的代码,并逐步缩小范围。
jiangtao 2000-03-15
  • 打赏
  • 举报
回复
用BoundsChecker for VC可以跟踪各种资源和内存的分配,
检查资源泄漏情况
在程序员大本营的工具集合上有这个Tool
Shania 2000-03-14
  • 打赏
  • 举报
回复
1.Create() must Delete(),inlclude(CreateCompatibleDC).

2.SelectObject() must be a pair!
org = SelectObject(hdc,new);

//your code

SelectObject(hdc,org);

3.调用GDI资源有一定的顺序:
For example:
HBITMAP hbmp = LoadBitmap(ID_BITMAP);
HDC memdc = CreateCompatibleDC(hdc);
HBITMAP hbmpOld = SelectObject(memdc,hbmp);

//your paint code.......

SelectObject(memdc,hbmpOld);//must do,otherwise will reduce GDI resource
DeleteDC(hdc);
DeleteObject(hbmp);
Sniper 2000-03-14
  • 打赏
  • 举报
回复
再补充问一下:Visual Stdio有没有提供工具跟踪GDI资源的分配和回收?或没什么办法跟踪GDI资源的分配和回收?
geofee 2000-03-13
  • 打赏
  • 举报
回复
windows本身有这个毛病,它自以为是的按照它的方式回收资源。
最好多用静态变量GDi资源
Jackzhu 2000-03-13
  • 打赏
  • 举报
回复
看来需要制作类似Java机制的垃圾箱功能,对所有有内存分配的类对象建立索引,以及时回收内存,不知道微软为什么不扩充一下他的基类。
xubin_sh 2000-03-13
  • 打赏
  • 举报
回复
1.CreatePen,CreateIcon...创建的GDI对象,用完后必须选出DC,然后删除
2.被选入DC的GDIObject绝对不能删除
3.DeleteObject是绝对必须的(除了装入的是系统资源如光标图标)
4.常用GDI对象,可以设置为静态变量,以提高性能
olo 2000-03-13
  • 打赏
  • 举报
回复
关注

2,586

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 资源
社区管理员
  • 资源
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧