我不太确定这是否是内存泄漏,或者是否没有为GC发布资源,但由于我引用了另一个对象的属性,因此看起来很可疑。
我将XML文件反序列化为对象。然后我使用此对象来填充另一个对象的某些属性。这样做是否将这个反序列化的文件保存到内存中的某个对象:
void Load() {
MyClass deserializedClass = Helper.GetDeserializedFileFromXml(path, type);
SetProperty(deserializedClass)
}
// MyProperty is a List<ADifferentClass>;
void SetProp(MyClass myClass) {
MyProperty = myClass.MyProperty;
}
更新
我在阅读下面的评论后意识到,关键部分(以及我问这个的原因)是属性是引用类型,是不同类的List。
答案 0 :(得分:1)
除非proprety的值以某种方式引用到类中,否则该类不应该继续存在。文件本身并没有留下(除非GetDeserializedFileFromXml做了意想不到的事情)。
进一步解释,如果你的课程是这样的:
public class MyClass {
public String MyProperty { get; set; }
}
然后将属性分配给MyProperty
不会导致MyClass
停留。另一方面,如果它是这样的话:
public class MyClass {
public MyClass() {
MyProperty = new HoldsAReference(this);
}
public HoldsAReference MyProperty { get; private set; }
}
然后你的班级会坚持下去。
答案 1 :(得分:0)
所以,答案是肯定的,因为我的属性引用了另一个类(从XML反序列化)属性,它是一个引用类型。反序列化的类挂了。
答案 2 :(得分:-1)
首先,您要了解Reference and Value types的作品。
从那里,基本的理解是,任何父对象属性内的父对象和对象之间没有关系。它们是完全不同的实体,可以在内存中的任何位置,只能从一个引用到另一个。
因此,如果在属性中有对象的唯一引用(除了对象,谁拥有此属性),但在其他任何地方都没有对父对象fron的引用,那么父对象将被标记为垃圾回收。