2011-01-18 36 views
4

有什麼更好的辦法來清除對象:如何「清除」一個對象?

1)編寫清除類的所有成員在類中的方法:MyObject.Clear();

2)在我的代碼,在商業邏輯,null的對象:MyObject = null;

+3

3)刪除引用並創建一個新的一? – spender 2011-01-18 20:58:01

回答

12

他們做不同的事情。將變量設置爲null對對象本身沒有任何影響。這可能意味着該對象現在有資格進行垃圾回收,但如果對同一對象有其他「實時」引用,則不會產生任何影響。

你應該怎麼做?那麼,這完全取決於你的情況。如果你有很多不同的地方參考同一個對象,他們都應該看到「清除」,然後修改對象。如果您只需要一個變量來引用不同的對象或根本不需要對象,只需更改該變量的值即可。

重要的是要知道兩者之間的差異 - 請注意,變量的值永遠不會是對象 ...它可能是參考值或值類型值。

1

第二個。 小心不要對您的對象持續引用。任何綁定事件處理程序,集合中的引用都會使您的實例「不可用」。

如果你來自C++,不要打擾垃圾收集器。我意識到,對內存性能的癡迷可能會導致操縱內存收集過程。事實上,你永遠不需要使用它。只是取消任何引用。

3

我會建議只構造一個對象的新實例,而不是清除它。

如果您完成了一個對象,但沒有包含其引用的類,則將其設置爲null可能是適當的。但是,如果它只是在方法中使用,則不必做任何事情(垃圾收集器會在沒有引用該對象後的某個時候清理它) - 讓它「脫離」讓它掉下來的範圍。如果它在一個集合中,您可以將其從集合中刪除。

一個例外是如果對象實現IDisposable。在這種情況下,您可能想要將其稱爲Dispose()方法,或者嘗試構造代碼以在using塊中使用它,以便適當地清理其資源。

0

您的問題的答案是,「這取決於」。這取決於你想用它做什麼。如果你想保留一個特定實例的引用(即其他引用它,或者構建它很昂貴),那麼你最好用Clear方法。但只有當你要繼續使用那個特定的對象實例。

如果您不再關心某個對象,那麼請停止引用它。通常,您不必將其設置爲null,因爲代碼生成器可以確定對象的生存期並使該對象可用於垃圾回收。但是,如果您想確保儘快收集對象(即在下一次垃圾回收週期中),那麼設置MyObject = null即可。同樣,這通常不是必需的,但它不會傷害任何東西。

0

我不這麼認爲。在使用C#語言課程時,我們有GC(垃圾回收)來推動這個變化非常困難,如果你使用C++,它證明很容易