垃圾收集和属性语法

时间:2011-10-02 02:43:26

标签: c# .net garbage-collection

我有一个需要来自xml文件的信息的类。我有另一个课程,以满足这种需要。一旦所需的信息在第一堂课中,我希望xml阅读器被垃圾收集。

现在xml阅读器获取所需信息并将其存储在私有字段中。第一个类查询这些字段并检索信息。我知道如果我使用xml阅读器中提供的函数查询字段,就没有剩余的链接,如果我在xml阅读器中使用属性,情况也是如此吗?

public float Var
{
    get { return someVar; }
    set { someVar = value; }
}

2 个答案:

答案 0 :(得分:1)

你的问题不太清楚。如果要在处理XML文件时允许对该实例进行垃圾回收,则可以在使用中使用XmlReader。如您所说,将属性分配给私有变量听起来是正确的。如果没有实时引用,GC可以收集XmlReader实例。您可以在example下面尝试。

using语句定义了一个范围,在该范围之外将放置一个或多个对象。对于像XmlReader这样具有文件处理程序的对象,调用Dispose方法是一种很好的做法。

   var myProperties;

    using (XmlReader reader = XmlReader.Create("file1.xml"))
    {
        while (reader.Read())
        {
                // myProperties = reader.....;
            }
        }
    }

上面的代码是检查垃圾收集是否存在任何问题的好方法,因为如果您尝试在using语句的一侧引用XmlReaders属性,它将在任何情况下抛出异常。如果您已将值分配给应该没问题的私有变量。

答案 1 :(得分:0)

如果你有XmlReader的引用(例如,在你的类中的一个字段中),那么当拥有的实例仍然存活时,它不能被垃圾收集。

如果您没有任何引用,它将被垃圾收集。