Was ist der Unterschied zwischen den folgenden zwei Codeschnipsel:
%Vor%und
%Vor% Ich habe angefangen, using
viel mehr zu verwenden, aber ich bin neugierig, was die tatsächlichen Vorteile im Vergleich zu Scoping-Objekten sind.
Bearbeiten: Nützliche Leckerbissen, die ich daraus gezogen habe:
Jon Skeet:
Beachten Sie, dass dies die Garbage Collection in keiner Weise, Form oder Form erzwingt. Müllsammlung und schnelle Ressourcenbereinigung sind etwas orthogonal.
Wird Eddins kommentieren:
Sofern Ihre Klasse die IDisposable-Schnittstelle nicht implementiert und über eine Dispose () - Funktion verfügt, verwenden Sie nicht die Verwendung von.
Das erste Snippet ruft Dispose
am Ende des Blocks auf - Sie können nur mit Typen arbeiten, die IDisposable
implementieren, und es ruft im Grunde Dispose
in einem finally-Block auf, so dass Sie es mit Typen verwenden können, die Ressourcen müssen aufgeräumt werden, zB
Beachten Sie, dass not die Garbage Collection in irgendeiner Form oder Form erzwingt. Müllsammlung und schnelle Ressourcenbereinigung sind etwas orthogonal.
Im Grunde genommen sollten Sie eine using
-Anweisung für so ziemlich alles verwenden, was IDisposable
implementiert und wofür Ihr Code-Block die Verantwortung übernehmen wird (hinsichtlich der Bereinigung).
Am Ende von using
wird das Objekt entsorgt (das Objekt, das Sie in die Klammer setzen, muss IDisposable implementieren). Das Objekt wird auch in Ausnahmefällen entsorgt. Und Sie müssen nicht auf den GC warten, um es irgendwann zu tun (Sie kontrollieren es).
BEARBEITEN: Der Nachteil des Bereichs ist:
Siehe die Dokumentation zu IDisposable und die Freigabe von Ressourcen für bestimmte Ressourcen.
Einfach gesagt, am Ende des Blocks using{}
können Sie verlässlich über zugewiesene Ressourcen verfügen (z. B. Dateihandles schließen, Datenbankverbindungen usw.)
using
erfordert nur eine Implementierung der IDisposable-Schnittstelle und ruft die Dispose-Methode am Ende des Bereichs auf.
Für viele tobende Argumente über die ordnungsgemäße Entsorgung von Objekten gibt es viele andere Threads.