2013-02-05 49 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

非常感谢,是的:(某个“内存泄漏”错误发生在某些日子之前 –