当你有如下代码:
Bitmap bmp = new Bitmap ( 100, 100 );
Graphics g = Graphics.FromImage ( bmp );
Pen p = new Pen ( Color.FromArgb ( 128, Color.Blue ), 1 );
Brush b = new SolidBrush ( Color.FromArgb ( 128, Color.Blue ) );
g.FillEllipse ( b, 0, 0, 99, 99 );
g.FillRegion ( b, pictureBox1.Region );
pictureBox1.BackColor = Color.Transparent;
pictureBox1.Image = bmp;
您需要处理笔和刷吗?位图和g呢?
我的主要问题是,如果这些需要手动处理,为什么它们不会在超出作用域后立即被处理?如果您没有手动处理它们,那么会发生什么?延迟导致人们手动处理吗?
Dispose
或使用using
语句,但不正确的是如果某些API正在使用它,Pen
否则将不会在作用域外被释放。Pen
有一个终结器,在它变得不可达时(对于短寿命对象,可能很快),会在某个未指定的时间运行,当这种情况发生时,它会执行相当于Dispose
的操作。 - Daniel EarwickerIDisposable
接口,那么就应该有某个地方的代码来对其进行处理。在这种情况下,很明显除了我们自己的代码之外,没有其他代码会执行这个任务。Earwicker所说的也是正确的,如果您忘记释放资源,还有一个终结器机制可以进行清理,但由于不确定它何时启动(它甚至可能在应用程序关闭时才启动),如果您不显式调用Dispose方法,可能会导致严重泄漏;通常情况下,对于这种情况依赖终结器机制是一个非常糟糕的想法。 - Pavel Minaev