想象一下,您正在編寫一個庫。比方說,這個庫將用於24/7服務器應用程序。有一些無用的資源,包裝在你的公共API中,所以你實現一次性模式(你甚至可以實現終結器)庫代碼中的一次性資源
通常,你會使用using
語句釋放非託管資源。但是你只是寫一個圖書館,而不是最終的應用程序。如果其他程序員「忘記」致電Dispose()
?您將在您的lib中獲取資源泄漏! 我們可以依靠終結者,但不能保證終結者會永遠是called。 那麼,有沒有辦法保證以某種方式釋放非託管資源?有任何想法嗎?
想象一下,您正在編寫一個庫。比方說,這個庫將用於24/7服務器應用程序。有一些無用的資源,包裝在你的公共API中,所以你實現一次性模式(你甚至可以實現終結器)庫代碼中的一次性資源
通常,你會使用using
語句釋放非託管資源。但是你只是寫一個圖書館,而不是最終的應用程序。如果其他程序員「忘記」致電Dispose()
?您將在您的lib中獲取資源泄漏! 我們可以依靠終結者,但不能保證終結者會永遠是called。 那麼,有沒有辦法保證以某種方式釋放非託管資源?有任何想法嗎?
除了記錄您的課程以外,沒有其他解決方案。在你的文件中明確地寫下你的課程是如何使用的(即它們意味着儘早處置,可能是using
,或者明確地致電Dispose
)。
如果你的消費者沒有正確地處理它的對象,那麼你就沒有更多的內存泄漏責任了,如果人們在野外垃圾被垃圾清理,工業界應該承擔污染的責任。
您可能希望服務器應用程序啓用了代碼分析規則CA2213: Disposable fields should be disposed。
否則我不知道是否有辦法保證他們調用你的Dispose()方法。
這有點可能會有所幫助。靜態分析規則:)但我想到可編程解決方案來解決這個問題。 – undefined
Thx回答。很好的比喻! – undefined