2012-09-26 81 views
1

可能重复:
When is Dispose necessary?
.Net and Bitmap not automatically disposed by GC when there is no memory left位图是某种系统资源吗?

一轮的头发拉我终于想通了,我的罪魁祸首是重新分配的调整操作Bitmap对象后。在足够的重新分配系统后,尝试绘制位图(Paint事件未被调用)并且变得非常干燥。

在分配新位图之前处理旧位图会修复它。

这就是说,必须有一些潜在的资源(超出了简单的存储单元)的那些成为孤儿旧位图用完。

我以为位图只是内存块,我可以离开了垃圾收集器。这是怎么回事??

+1

的问题是:是的'IDisposable'接口参与?如果是这样,正确的代码*必须*调用'Dispose',因为它说“嘿,这个实现可能或可能不需要在确保终结器运行之前及时清理一些东西”。 – 2012-09-26 05:22:46

+1

请参阅[何时需要处置](http://stackoverflow.com/questions/1209585/when-is-dispose-必要),[位图不会自动处理](http://stackoverflow.com/questions/5838608/net-and-bitmap-not-automatically-dispose by-gc-when-there-no-memory-left),[正确使用'IDisposable'接口](http://stackoverflow.com/questions/538060 /适当的使用该idisposable接口),许多其他。 – verdesmarald

+0

@verdesmarald:我想我错误地搜索了这个搜索。 –

回答

4

MSDN声明Bitmap封装了GDI +对象。所以我希望当你不再需要它们时,你必须调用Dispose()来释放这些系统资源。

编辑:位图图像是一个子类,下面的MSDN声明适用

总是调用Dispose你释放你的最后一个引用图像前。否则,直到垃圾回收器调用Image对象的Finalize方法后,它所使用的资源才会被释放。

+0

是的。如果打开“任务管理器”并转到“进程”选项卡(我不知道Windows 8)并启用“GDI对象”列,则会看到在不处理“位图”对象时会发生什么情况。 – Dai