如果没有处理非托管资源怎么办?

时间:2013-02-05 19:01:46

标签: vb.net memory

在我的应用程序中,有很多oledbConnections和数据表和数据源以及更多非托管资源..其中一些被处置(通过在不再需要它们时调用Dispose())而另一个没有Dispose ()(只是为了使代码行更少!)。 问题是:如果这些非托管资源在使用后没有处理掉,是否会有任何问题?

我有时(并非所有时间)都有错误“appname停止工作..”,这是由un Disposed对象引起的错误吗?

最后,在调用Dispose()时出现错误的情况是什么?

谢谢。

2 个答案:

答案 0 :(得分:2)

它在某种程度上取决于非托管资源。如果它是数据库连接,您最终将耗尽连接。也就是说,连接池中的所有连接都将打开但未使用。此时的数据库服务器将不允许任何新连接。所以你将无法再连接到数据库。

其他类型的资源也会出现类似的问题。你会泄漏它们,你可以进入各种奇怪的,难以调试的情况。

最佳做法是,如果课程完成后,请始终致电DisposeClose。在C#中,出于这个原因,您可以使用using语句。我不知道VB.net等效语法是什么,但不管它是什么,你都应该使用它。

答案 1 :(得分:0)

使用它们后,最好先处理所有内容。使用dispose时,清理托管和非托管资源。不正确处理这些可能会导致问题和内存泄漏,这可能是您收到该错误消息的原因。只需添加Dispose()方法:)一些额外的代码行可以最终保存您。