2017-01-24 5 views
0

System.Net.NetworkCredential hat keine Dispose Methode. Was ist der beste Weg, um ein mit dieser Klasse erstelltes Objekt ordnungsgemäß zu entsorgen?C# System.Net.NetworkCredential

JamesNT

+4

Wenn es keine IDisposable.Dispose ist, was Sie denken lässt, es Beseitigung tatsächlich erfordert? –

+0

Was bedeutet "entsorgen" für etwas, das "IDisposable" nicht implementiert? –

Antwort

1

Wenn ein Objekt IDisposable nicht implementiert, dann ist es der richtige Weg, es zu "entsorgen", wenn Sie damit fertig sind, es außerhalb des Geltungsbereichs zu lassen.

IDisposable ist so konzipiert, das Objekt zu ermöglichen, alle nicht verwalteten Ressourcen zu bereinigen, es halten könnte. Wenn das Objekt nur verwaltete Ressourcen enthält, gibt es keinen Grund, darüber zu verfügen; Alles wird vom Müllsammler gereinigt.

Von MSDN:

Die primäre Verwendung dieser Schnittstelle ist nicht verwalteten Ressourcen freizugeben. Der Garbage Collector gibt automatisch den Speicher frei, der einem verwalteten Objekt zugewiesen wurde, wenn dieses Objekt nicht mehr verwendet wird. Es ist jedoch nicht möglich, vorherzusagen, wann die Garbage Collection stattfinden wird. Darüber hinaus hat der Garbage Collector keine Kenntnisse über nicht verwaltete Ressourcen wie Fensterhandles oder offene Dateien und Streams.

Verwenden Sie die Dispose-Methode von diese Schnittstelle, um nicht verwaltete Ressourcen explizit in Verbindung mit dem Garbage Collector freizugeben. Der Konsument eines Objekts kann diese Methode aufrufen, wenn das Objekt nicht mehr benötigt wird.

+0

Und deshalb muss ich nicht um 1 Uhr morgens an der Programmierung arbeiten. – JamesNT

2

Sie einfach den Objektverweis auf Null in dem schließlich Abschnitt eines try einstellen könnte.

var myCredential = new NetworkCredential(); 

try 
{ 
    //Do stuff here 
} 
finally 
{ 
    myCredential = null; 
} 

jedoch die .NET Garbage Collection sollte Ihren Objektverweis für die Sammlung markiert, sobald sie außerhalb des Gültigkeitsbereiches wird.

+1

In der Tat kann die Laufzeitumgebung ein Objekt nach seiner letzten Verwendung sammeln. Indem Sie es in try/finally einschließen und der Variable, die Sie machen, null zuweisen, wird es länger nicht mehr einholen. Es ist nicht abzusehen, ob das Sammeln des Objekts deterministischer wird. –

+0

Danke ... das ist interessant! – Wheels73