2013-02-05 95 views
0

在我的應用程序中,有很多oledbConnections和數據表和數據源以及更多的非託管資源..其中一些可能被丟棄(通過在不再需要它們時調用Dispose()),另一個不具有Dispose )(只是爲了使代碼行更少!)。 現在的問題是:如果這些非託管資源在使用之後沒有被處置,是否會有任何問題出現在應用上?如果未處理資源未處理,該怎麼辦?

我有時(並非所有的時間)錯誤「appname已停止工作..」,這是由un的Disposed對象造成的錯誤嗎?

最後,調用Dispose()時發生了什麼情況?

謝謝。

回答

2

它在一定程度上取決於非託管資源。如果它是數據庫連接,最終會導致連接中斷。也就是說,連接池中的所有連接都將打開但未使用。此時的數據庫服務器將不允許任何新的連接。所以你將不能再連接到數據庫。

其他類型的資源也會出現類似的問題。你會泄漏他們,你可以進入各種奇怪的,難以調試的情況。

最好的做法是,如果類已經完成,那麼總是調用DisposeClose。在C#中,您可以使用using聲明正是因爲這個原因。我不知道VB.net等價的語法是什麼,但不管它是什麼,你都應該使用它。

+0

VB.NET還有[使用](http://msdn.microsoft.com/zh-cn/library/htd05whh.aspx)子句。 – Neolisk

+0

非常感謝你,這是我希望的答案! –

0

一旦您完成所有操作,處理所有內容始終是最佳做法。當您使用dispose時,清理託管和非託管資源。沒有正確處理這些可能會導致問題和內存泄漏,這可能是您收到該錯誤消息的原因。只需添加Dispose()方法:)幾行額外的代碼最終可以爲您節省時間。

+0

非常感謝,是的:(某個「內存泄漏」錯誤發生在某些日子之前 –