2013-01-22 110 views
0

我正在封裝一些手動資源處理的本地代碼。我希望我的C#包裝器在不將責任傳遞給客戶端的情況下處理此問題。這是可能的,還是我不可避免地必須實施IDisposable並將責任傳遞給客戶端代碼?C#類是否可以自動管理非託管資源

ie甚至可以編寫自動處理管理資源的類嗎?

如果我說確定性處理這些資源不是問題,而且我只關心它們被安全釋放,我很高興讓GC通過終結者安排他們的發佈。

+1

這完全取決於有問題的非託管代碼。 –

+0

非託管資源是在dll中使用的不透明結構的句柄。 dll api提供了創建,增加參考計數和釋放這些句柄的功能(減少參考計數)。任何對create/addref函數的調用都需要與相應的版本匹配。 –

+0

好嗎?您問是否可以編寫類來自動處理託管資源。答案當然是使用.NET內部的垃圾回收器 –

回答

1

這明確地說明了終結器的設計目的。寫一個釋放非託管資源,CLR會在對象被垃圾收集後自動調用它。你當然可以實現IDisposable來儘早發佈它,但這不是必需的。如果資源分配沒有影響,可以跳過。你描述的那種類型與COM對象的匹配。誰的.NET包裝也不實現IDisposable。

密切關注程序的基本資源使用情況,以確保這不是問題。如果您對實際使用的資源不夠了,可能很難判斷。

相關問題