函数内的Dispose方法是否重要?

ihi*_*ham 4 c# dispose idisposable function

所以最近我一直在使用一次性物体,我想知道在一个函数中处理一个对象是否有用?在这两个函数之间使用.Dispose()在函数内部确实很重要,因为函数中的所有对象一旦完成就会消失

void FOO()
{
    var x= new DisposableObject();
    //stuff
}

void FOO()
{
    using(var x= new DisposableObject())
    {
        //stuff
    }
}
Run Code Online (Sandbox Code Playgroud)

its*_*e86 6

你应该总是Dispose()需要它的对象.即使对象是垃圾回收,也可能存在未释放的非托管资源.调用Dispose()(或using在第二个示例中)确保对象可以正确地释放它所需的非托管资源.

  • @ i3arnon不一定,你甚至不能保证终结器将为所有对象运行. (3认同)

Jak*_*rtz 3

函数内的所有对象将在函数完成后立即消失

对象将保留,本地引用将消失。当垃圾收集器运行并确定它们无法访问时,这些对象将“消失”。

在从内存中删除无法访问的对象之前,它的终结器将运行(如果已实现),清除所有非托管资源。

问题是这一切都不是确定性的。你永远不知道GC什么时候会运行,在某些情况下终结器甚至不会被执行。

Dispose如果可能的话,您应该始终调用方法。

如果您想了解有关终结器的更多详细信息,您应该阅读这两篇文章:第 1 部分第 2 部分