2009-07-16 151 views
2

比方說,我有一個類集合,其中包含項目列表。在這種情況下,我應該擔心釋放資源嗎?

public class Collection 
{ 
    private List<Item> MyList; 
    //... 
} 

我有這個Collection類的幾個實例,它們都有不同的MyLists但共享一些項目。 例如:有10個項目,Collection1參考項目1-4,Collection2在其列表中包含項目2-8和Collection3 4,7,8和10。

我實現了這個如下:我有一個全局列表,其中包含任何可用的項目。在我創建一個新集合之前,我檢查是否已經有這個列表中需要的項目 - 如果沒有,我創建項目並將其添加到全局列表(以及當然的集合)。

我看到的問題是那些項目永遠不會被釋放 - 即使所有集合都消失了,它們消耗的內存仍然沒有被釋放,因爲全局列表仍然引用它們。 這是我需要擔心的事嗎?如果是這樣,我該怎麼辦?我想爲全局列表添加一個計數器,以查看何時不再需要某個項目並刪除其參考。

編輯: 這實際上是一個設計問題,我認爲。我將放棄全局列表的想法,而是遍歷所有集合,看看他們是否已經擁有所需的項目。

回答

1

它看起來有點像設計問題,你真的需要全局列表嗎?

除了Jon提到的弱關聯之外,您還可以定期重建全局列表(例如在刪除集合後),或者只在需要時動態構建它,然後再次釋放它。

您必須決定哪種方法最適合,我們這裏沒有足夠的上下文。

2

如果全局列表需要對項目的引用,那麼你不能真實地釋放它們。你真的需要參考全球列表中的項目嗎?你應該什麼時候從邏輯上能夠從全局列表中刪除項目?

您可以考慮在全局列表中使用weak references,並且如果收集到指示對象,則會定期修剪WeakReference值本身。

+0

感謝提到弱引用 - 我不知道他們。但我不認爲它們與我的問題有關。 – CaptainProton 2009-07-17 05:52:59

相關問題