IDisposable
Eintrag zuletzt aktualisiert am: 23.07.2012
IDisposable ist eine zentrale Schnittstelle im
.NET Framework seit Version 1.0
Im Gegensatz zu COM verfügt das
.NET Framework über eine automatische Speicherverwaltung, die in der
Common Language Runtime (
CLR) implementiert ist. Die
CLR enthält einen
Garbage Collector (GC), der im Hintergrund (in einem System-
Thread) arbeitet und den Speicher aufräumt. Der Speicher wird allerdings nicht sofort nach dem Ende der Verwendung eines
Objekts freigegeben, sondern zu einem nicht festgelegten Zeitpunkt bei Bedarf (Lazy Resource Recovery). Beim Aufräumen des Speichers erzeugt der
Garbage Collector einen Baum aller
Objekte, auf die es aktuell einen
Objektverweis gibt. Der Speicher aller nicht mehr erreichbaren
Objekte wird freigegeben.
Der
Garbage Collector kann von einer Anwendung nur bedingt beeinflusst werden. Die Anwendung kann mit dem Befehl System.GC.Collect() dem
Garbage Collector den Auftrag geben, tätig zu werden. Eine Anwendung kann jedoch eine Speicherbereinigung nicht verhindern. Der
Garbage Collector ruft die Destruktoren (alias Finalizer) der .NET-
Objekte auf. Die Reihenfolge des Aufrufs und ob der Destruktor überhaupt aufgerufen wird, ist jedoch nicht deterministisch, d. h., es kann sein, dass ein Destruktor nicht aufgerufen wird. Beim Schließen einer .NET-Anwendung werden die
Destruktoren der verbliebenen
Objekte nicht aufgerufen.
Um sich von den deterministischen Destruktoren der Sprache C++ abzuheben, spricht man in .NET von Finalisierung statt von Destruktion.
Klassen, bei denen der Aufruf des Destruktors wichtig ist, weil dabei Ressourcen freigegeben werden, müssen dem Disposable-Muster folgen und die Schnittstelle System.IDisposable mit der
Methode Dispose() implementieren. Die Anwendung muss
Dispose() manuell aufrufen. Die
Programmiersprachen C# und Visual Basic unterstützen ein Programmblockkonstrukt mit Namen using. Am Ende eines using-Blocks wird für die im Kopf des Blocks angegebenen
Variablen automatisch die
Dispose()-
Methode aufgerufen.