我有一个需要来自xml文件的信息的类。我有另一个课程,以满足这种需要。一旦所需的信息在第一堂课中,我希望xml阅读器被垃圾收集。
现在xml阅读器获取所需信息并将其存储在私有字段中。第一个类查询这些字段并检索信息。我知道如果我使用xml阅读器中提供的函数查询字段,就没有剩余的链接,如果我在xml阅读器中使用属性,情况也是如此吗?
public float Var
{
get { return someVar; }
set { someVar = value; }
}
答案 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
的引用(例如,在你的类中的一个字段中),那么当拥有的实例仍然存活时,它不能被垃圾收集。
如果您没有任何引用,它将被垃圾收集。