2011-05-05 74 views
2

我不太確定這是否是內存泄漏,或者資源未被釋放用於GC,但由於我引用了另一個對象的屬性,因此它看起來很可疑。這是內存泄漏還是未發佈的資源

我將一個XML文件反序列化爲一個對象。然後我使用這個對象來填充另一個對象的一些屬性。請問這樣做保留此反序列化的文件 - 到 - 一類對象在內存的某個地方:

void Load() { 
    MyClass deserializedClass = Helper.GetDeserializedFileFromXml(path, type); 
    SetProperty(deserializedClass) 
} 

// MyProperty is a List<ADifferentClass>; 
void SetProp(MyClass myClass) { 
    MyProperty = myClass.MyProperty; 
} 

UPDATE

我閱讀下面的意見至關重要的部分後實現(爲什麼我問這是)是屬性是一個引用類型,一個不同類的列表。

+0

需要更多的cotext和代碼才能真正理解正在發生的事情。 – 2011-05-05 03:46:48

+1

MyProperty是類型的值還是參考? – 2011-05-05 04:31:53

回答

0

所以,答案是肯定的,因爲我的屬性引用了另一個屬於引用類的類(從XML反序列化)。反序列化的類掛起。

1

該類不應該停留,除非該知識的價值以某種方式返回到該類。該文件本身並不存在(除非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; } 
} 

然後你的班級將繼續存在。

+0

這是我的擔心。當我做*屬性= myclass.property *是分配維護一個引用迫使類不會消失 – 2011-05-05 04:08:28

-1

首先是讓你瞭解Reference and Value types的作品。

從那裏,基本瞭解,父對象的任何屬性內的父對象和對象之間沒有關係。它們是完全不同的實體,它們可以在任何記憶中的任何地方,只有從一個到另一個的參考。因此,如果對屬性中的對象(除了對象,擁有此屬性的對象除外)存在單引用,但是在其他任何位置沒有對父對象fron的引用,則父對象將標記爲垃圾回收。

+1

這不是一個有用的答案。它居高臨下,實際上並沒有爲這個問題提供正確的答案。 – 2011-05-05 05:04:36

+0

@Alastair:*(原問題)這樣做是否將這個反序列化的文件類存儲在某個內存中?當Tony Basallo明白,值和引用類型如何工作時,他可以輕鬆回答這個問題。 – Euphoric 2011-05-05 05:10:09

+0

當然,但顯然他不明白,你只是告訴他理解並沒有幫助。您的編輯效果更好,但如果您想要提供幫助,請提供一些示例或提供更多詳細信息。 – 2011-05-05 05:24:41