2012-03-25 30 views
0

我在應用程序內部進行了一些性能優化,並且有很多地方將集合分配給listbox的itemssource屬性。將集合分配給列表框時,是從內存中分配的原始集合。如果沒有,通過將其設置爲null將它標記垃圾收集的集合?將分配給itemssource的資源清除後,將集合設置爲null?

例如:

void myWebServiceCompleted(object sender, List<Item> itemList) 
{ 
    ItemListBox.ItemsSource = itemList; 
    //Would setting itemList = null clear up resources? 
} 

我只是擔心,因爲這種類型的分配,在應用中的多個地方作出,如果上述屬實,這意味着內存的兩倍。

回答

1

ListBox中保持你原來的列表的引用,所以它不是垃圾收集。 如果因爲某種原因想要收集原始列表,可以手動將ListItems添加到ListBox。

在這種情況下,只要沒有其他參考,就可以收集原始列表。

我想這將是有用的,如果您的集合中的每個項目都是資源沉重的,並且列表框只需要知道幾個字段(例如名稱和ID)

1

不,它不會。 itemList是一個引用類型。它不像你想象的那樣重複。相反,你只需要多次引用它。這就像在郵件中接收到多個字母並且地址相同。這並不意味着具有該地址的房屋是重複的,只是有多個地址指向同一房屋。

只要一個有根的對象仍然引用您的集合,它就不會被垃圾回收器釋放。將itemList設置爲null對此集合消耗的總空間沒有影響。

我只是擔心,因爲這種類型的任務是在應用程序的多個地方進行的,這意味着內存的兩倍。

這並不意味着。我強烈建議你放棄你所做的一切並閱讀引用類型,直到你理解這個非常重要的點。

我現在明白爲什麼喬爾斯波斯基認爲每個程序員都應該學習C.

相關問題