1

所以可以说我们有类似这个 websericeclient 对象的东西

var myname = new WebServiceClient().GetName ( ) ; 

这个对象(WebServiceClient())会发生什么,它会自动处理还是留在内存中。

4

2 回答 2

1

“处置”(调用 IDisposable.Dispose())与内存无关。它与释放非托管资源(如文件或数据库句柄)有关。

当您不调用 Dispose() 时会发生什么情况,这些资源将一直保留到当垃圾收集器运行以从内存中释放对象时调用终结器。如果您需要这些资源(或者如果在它们被 Disposed() 时会发生一些有趣的事情),那么您不想等待任意时间 - 完成后立即调用 Dispose()。

于 2013-01-31T16:19:41.157 回答
0

这取决于_GetName()_方法。并且在_WebServiceClient()_.

让我们举个例子:

public class WebServiceClient : IDisposable
{
    private static WebServiceClient viciousReference = null;

    public WebServiceClient()
    {
        viciousReference = this;
    }

    ~WebServiceClient()
    {
        Dispose();
    }

    public void Dispose() 
    {  
        // Standard Dispose implementation 
    }
}

如果您的对象实现Dispose()了,请始终尝试自己调用它。不要只依赖垃圾收集器。

于 2013-01-31T16:19:40.333 回答