是否有必要这样做poly = null; ?完成功能后,垃圾收集器会清理还是?
这是一个简单的例子:
public void redrawSingelPoly(Canvas canvas)
{
Polyline poly = new Polyline();
poly.Stroke = colorBrush;
poly.StrokeThickness = basicLineThick;
poly.Points = points;
canvas.Children.Add(poly);
poly = null; //Garbage Collector
}
答案 0 :(得分:6)
您的多边形对象不会在您的示例中进行垃圾回收。这就是为什么......
您正在执行以下操作...
canvas.Children.Add(poly);
保持对对象的引用。即使你设置了对该对象的本地引用= null,仍然有一个从该方法传出的引用!
垃圾收集器只收集不可缓存的对象。
话虽如此 - 是否有必要设置poly = null?不,没有必要。
答案 1 :(得分:1)
将poly
设置为null
是不必要的,至少有两个原因。
由于C#(和.net一般)是一个托管内存环境,变量的内存将由垃圾收集器自动完成。
垃圾收集器不会收集仍在使用的内存,如果canvas.Children
属性在范围内,Polyline
对象使用的内存也是如此,无论是poly
变量的值。
答案 2 :(得分:0)
总的来说,这不是必需的,但是让我感到惊讶的是:
canvas.Children.Add(poly);
这一行。不清楚Add(..)
方法中发生了什么。
从范围角度GC
将找到并收集未被全局引用引用的所有局部变量,因此无法执行=null