Freigeben über


Hintergrundinformationen zur Speicherverwaltung

Aktualisiert: November 2007

Entsprechend ihrer jeweiligen Kenntnisse verfügen Entwickler über unterschiedliche Erfahrungen mit der Speicherverwaltung. In bestimmten Situationen müssen die Programmiergewohnheiten an die automatische Speicherverwaltung der Common Language Runtime angepasst werden.

COM-Entwickler

COM-Entwickler sind es gewohnt, die Verweiszählung als manuelle Speicherverwaltungstechnik zu implementieren. Jedes Mal, wenn auf ein Objekt verwiesen wird, wird ein Zähler erhöht. Wenn der Verweis auf ein Objekt den Gültigkeitsbereich verlässt, wird der Zähler dekrementiert. Wenn der Verweiszähler eines Objekts 0 erreicht, wird das Objekt beendet und der Arbeitsspeicher freigegeben.

Die Verweiszählung ist die Ursache vieler Programmierfehler. Wenn die Regeln für die Verweiszählung nicht genau befolgt werden, können Objekte vorzeitig freigegeben werden oder Objekte, auf die nicht verwiesen wird, Arbeitsspeicher belegen. Zirkuläre Verweise sind ebenfalls häufig eine Fehlerquelle. Bei einem zirkulären Verweis enthält das untergeordnete Objekt einen Verweis auf das übergeordnete Objekt und umgekehrt. Bei diesem Szenario können beide Objekte weder freigegeben noch zerstört werden. Dies ist nur möglich, wenn das übergeordnete und das untergeordnete Objekt ein festes Muster zum Verwenden und Zerstören einhalten, indem z. B. das übergeordnete Objekt immer zuerst das untergeordnete Objekt löscht.

Wenn Sie Anwendungen in einer für die Common Language Runtime entwickelten Sprache entwickeln, ersetzt der Garbage Collector die Verweiszählung, und somit können keine Fehler mehr durch die manuelle Speicherverwaltung entstehen.

C++-Entwickler

C++-Entwickler führen häufig Aufgaben bezüglich der manuellen Speicherverwaltung aus. Wenn Sie in C++ mit dem new-Operator Speicher für ein Objekt reservieren, müssen Sie den Arbeitsspeicher für das Objekt mit dem delete-Operator freigeben. Dies kann zu Fehlern führen, wenn z. B. ein Objekt nicht freigegeben wird und damit Speicherverluste entstehen, oder wenn auf den Speicher für ein Objekt zugegriffen wird, das bereits freigegeben wurde.

Wenn Sie Anwendungen mit Visual C++ oder einer anderen für die Common Language Runtime entwickelten Sprache verfassen, müssen Sie ein Objekt nicht mit dem delete-Operator freigeben. Der Garbage Collector führt dies automatisch aus, wenn das Objekt nicht mehr von der Anwendung verwendet wird.

Einige C++-Entwickler verwenden nach Möglichkeit keine Objekte mit kurzer Lebensdauer, da der Aufwand für die manuelle Verwaltung des Speicher für diese Objekte zu hoch ist. Bei verwalteten Objekten mit kurzer Lebensdauer, die zwischen zwei Einsammelvorgängen erstellt werden und ihre Gültigkeit überschreiten, ist der Aufwand für das Reservieren und Freigeben von Arbeitsspeicher sehr gering. In .NET Framework wurde der Garbage Collector für das Verwalten von Objekten mit kurzer Lebensdauer optimiert. Beim Entwickeln verwalteter Anwendungen sollten Sie Objekte mit kurzer Lebensdauer in Fällen verwenden, in denen diese den Code vereinfachen.

Visual Basic-Entwickler

Visual Basic-Entwickler haben Erfahrung mit der automatischen Speicherverwaltung. Die bekannten Programmiertechniken gelten auch für die meisten in .NET Framework erstellten verwalteten Objekte. Achten Sie jedoch auf das empfohlene Entwurfsmuster für die Dispose-Methode, die beim Erstellen oder Verwenden von Objekten, die nicht verwaltete Ressourcen kapseln, verwendet wird.

.NET Framework unterstützt neben den hier genannten weitere Sprachen, die für die Common Language Runtime entwickelt wurden. Unabhängig von der verwendeten Sprache stellt der Garbage Collector von .NET Framework eine automatische Speicherverwaltung bereit. Er reserviert Arbeitsspeicher für verwaltete Objekte, gibt diesen frei und führt ggf. Finalize-Methoden und Destruktoren aus, um nicht verwaltete Ressourcen ordnungsgemäß zu bereinigen. Die automatische Speicherverwaltung vereinfacht das Entwickeln, da häufig vorkommende Programmierfehler bei der manuellen Speicherverwaltung beseitigt werden.

Siehe auch

Konzepte

Finalize-Methoden und Destruktoren

Weitere Ressourcen

Garbage Collection