2010-11-22 49 views
0

DOT NET垃圾收集器只能處理內存資源,還能處理孤立對象使用的其他資源?dot net內存處理,CLR垃圾回收器是否處理其他資源?

CLR如何處理以釋放孤立對象所使用的其他資源。

+0

這** **必須是重複的,但我可以的事情這是問題的重複關... – 2010-11-22 11:12:18

+0

可能是重複的,我第一次嘗試在這裏但沒有得到。現在我得到了一些關於CLR內存管理的答案和關鍵字。 – PawanS 2010-11-22 11:26:32

回答

0

.Net GC只管理放置在託管堆上的對象,即託管對象。這些託管對象可能會導致訪問非託管對象,如數據庫連接或文件句柄等。開發人員需要通過實現IDisposable或Finalize來釋放這些資源,具體取決於您的需要。

MSDN指出:

A類必須實現最終確定時,它 使用非託管資源,如文件句柄 或數據庫連接時使用它們的管理 對象被回收該 必須被釋放。 請參閱IDisposable接口,瞭解如何配置 補充資源和更可控的 資源配置方式。

這裏的鏈接是相同的:http://msdn.microsoft.com/en-us/library/system.object.finalize.aspx

+0

不,使用Finalize不是釋放非託管對象的正確方法。你應該使用IDisposable接口。 – Guffa 2010-11-22 11:08:31

+0

如果您想使用確定性處置 - 使用IDisposable接口。你永遠不知道什麼時候你的終結者將被稱爲 – ppiotrowicz 2010-11-22 11:11:23

+0

同意。我的錯。最佳實踐表明,應儘可能使用IDisposable。 – 2010-11-22 11:20:30

4

GC只處理被管理對象。

所有非託管資源需要進行手工處理:

  1. 在使用非託管資源的任何類型的落實IDisposable接口。
  2. 確保在完成使用實現IDisposable的任何對象時調用Dispose方法。這通常通過使用using塊來完成。
+0

Thanx你可以建議任何鏈接.. – PawanS 2010-11-22 11:10:29

+0

http://msdn.microsoft.com/en-us/magazine/cc163392.aspx – ppiotrowicz 2010-11-22 12:06:56