2013-03-19 58 views
0

我正在使用c#(.NET)的套接字項目。我正在處理一些類(數據包)的數據。當我在查看內存使用情況時,如果數據傳入,它正在上升!即創建課程。如何從內存中刪除(手動)類和未使用的變量/類(不使用GC!)?從內存中刪除類/變量實例(完全)

如果我嘗試一些基本的事情,例如只接收數據,它會再次上升。在這一點上,我想從內存中刪除/刪除類/變量完全

任何人都可以幫忙嗎?

+1

我不知道我的理解。 GC _is_用於刪除未使用的對象。如果你不想使用它,我認爲你被困在編寫非託管代碼並自己做。 – 2013-03-19 13:06:45

回答

2

不能用手動完成的好處和痛苦(在某些情況下)。即使強制GC.Collect(),也不保證獲得可用內存。

另外,內存清理請求是一個請求,所以可能會發生一些延遲,而不是立即。

所以在CLR的唯一途徑,如果我們談論的是.NET對象分配,清理內存是:清理你的對象(S),讓他們沒有指向他們的其他對象,

  • 等待,直到GC將收集他們,如果將(取決於代)

  • 手動調用GC.Collect(),這不是建議,而是也得以使用,通過沒有出示擔保,該內存將被清洗的方式。

對於進一步閱讀:what are the Generations in Garbage Collection?

+0

即,我只能這樣做:1:從arrayList中刪除對象,2:將其設置爲「null」。對? :L – freaka61 2013-03-19 13:14:17

+1

@ freaka61:設置什麼爲空?沒有將對象設置爲null的這種概念 - 僅將變量值設置爲null。如果你還沒有一個變量持有對該對象的引用,那麼你將設置爲null? – 2013-03-19 13:16:38

+0

@JonSkeet錯誤,我如何刪除實例類? (如何GC可以刪除它?) – freaka61 2013-03-19 13:18:03

5

你不能。你不會在C#中手動刪除對象。如果垃圾收集器沒有自動執行此操作,那麼您很可能會在某個地方抓住對象。使用探查器找出位置並修復您的代碼。

+0

我使用數組中的數據包(或字典)。如果數據包處理,即處理,我想從內存中刪除它。我已經從ArrayList(或字典)中刪除它。 – freaka61 2013-03-19 13:10:02

+1

@ freaka61:那麼如果沒有其他東西持有它,它*將*最終被垃圾收集。你**不能**從內存中刪除它。它只是不會發生。你需要接受這一點。 (另外,你爲什麼仍然使用ArrayList?) – 2013-03-19 13:15:56