如果我不调用此代码片段中Dispose的pen对象,会发生什么?
Dispose
pen
private void panel_Paint(object sender, PaintEventArgs e) { var pen = Pen(Color.White, 1); //Do some drawing }
该Pen会由GC在未来某个不确定的点进行收集,你是否不叫Dispose。
Pen
但是,GC不会清除笔所拥有的任何非托管资源(例如GDI +句柄)。GC仅清除托管资源。通过调用Pen.Dispose,您可以确保及时清理这些非托管资源,并且不会泄漏资源。
Pen.Dispose
现在,如果Pen拥有终结器,并且该终结器清除了非托管资源,那么当Pen垃圾被回收时,那些非托管资源将被清理。但是重点是:
Pen实施IDisposable。IDisposable用于处置非托管资源。这是.NET中的模式。
IDisposable
有关该主题的先前评论,请参见此答案。