所以可以說我們有一些這樣的事websericeclient對象將未分配的對象變量處置自動
var myname = new WebServiceClient().GetName () ;
會發生此對象是什麼(WebServiceClient此類())是它會自動銷燬或保留在內存中。
所以可以說我們有一些這樣的事websericeclient對象將未分配的對象變量處置自動
var myname = new WebServiceClient().GetName () ;
會發生此對象是什麼(WebServiceClient此類())是它會自動銷燬或保留在內存中。
這取決於_GetName()_
方法。並在_WebServiceClient()_
。
讓我們的例子:
public class WebServiceClient : IDisposable
{
private static WebServiceClient viciousReference = null;
public WebServiceClient()
{
viciousReference = this;
}
~WebServiceClient()
{
Dispose();
}
public void Dispose()
{
// Standard Dispose implementation
}
}
如果你的對象實現Dispose()
,總是儘量調用它自己。不要只依靠垃圾收集器。
所以你說它會被視爲它被分配給一個變量? – sino
@sino不,我說它取決於_GetName()_和_WebServiceClient_的底層實現。您可能認爲垃圾收集器將最終化已創建的_WebServiceClient_實例,因爲您沒有將其分配給變量,但如果_WebServiceClient_構造函數像上面的代碼一樣實現,則仍然會引用創建的實例。所以,垃圾收集器將永遠不會最終確定它。 –
「Disposing」(調用IDisposable.Dispose())與內存無關。它與釋放非託管資源(如文件或數據庫句柄)有關。
當您不調用Dispose()時會發生什麼,這些資源將保留到垃圾收集器運行以從內存釋放對象時調用終結器。如果你需要這些資源(或者如果他們被Disposed()時發生了一些有趣的事情),那麼你不想等待一段時間 - 一旦完成它就調用Dispose()。
你的意思是敲定而不是處置? –