2

是否有必要这样做 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
    }
4

3 回答 3

6

在您的示例中,您的 poly 对象不会被垃圾收集。这就是为什么...

您正在执行以下操作...

canvas.Children.Add(poly);

它保留对对象的引用。即使您设置了对该 object = null 的本地引用,仍然有一个从方法中传递出来的对它的引用!

垃圾收集器只收集无法访问的对象。

话虽这么说 - 是否有必要设置 poly = null?不,没有必要。

于 2013-06-25T14:38:04.350 回答
1

设置polynull是不必要的,至少有两个原因。

  1. 由于 C#(和一般的 .net)是托管内存环境,因此变量的内存将由垃圾收集器自动完成。

  2. 垃圾收集器不会收集仍在使用的内存,如果canvas.Children属性在范围内,则Polyline对象使用的内存也将如此,而与变量的值无关poly

于 2013-06-25T14:36:08.680 回答
0

一般来说,这不是必需的,但让我担心的是:

canvas.Children.Add(poly);

这条线。不太清楚Add(..)方法内部发生了什么。

作用域的角度GC会定位和收集所有没有被全局引用引用的局部变量,所以没有做的感觉=null

于 2013-06-25T14:32:40.907 回答