6.3 Boxing und Unboxing
Zu den Referenztypen werden Klassen und Delegates gerechnet, Strukturen und Enumerationen bilden die Familie der Wertetypen. Um noch einmal die wichtigsten Unterschiede dieser beiden Kategorien auf den Punkt zu bringen: Objekte, die auf Klassen- oder Delegatedefinitionen basieren, werden auf dem Heap verwaltet, Objekte vom Typ einer Struktur oder Enumeration auf dem Stack. Die Verwaltung auf dem Stack schont die Ressourcen und verbessert die Performance, weil der komplexe Overhead der Objektverwaltung im Heap entfällt. Wertetypen sind deshalb dann besonders gut geeignet, wenn sehr viele Objekte dieses Typs erwartet werden können.
In diesem Zusammenhang müssen wir noch eine weitere Technik erörtern: das Boxing und Unboxing. Was ist darunter zu verstehen? Betrachten wir das einfache Beispiel einer Integer-Variablen:
int value = 2;
Im nächsten Schritt weisen wir diese Variable einer Object-Variablen zu. Das ist grundsätzlich überhaupt kein Problem, da hierbei eine implizite Konvertierung stattfindet:
object @object = value;
Listing 6.11 Boxing eines Integers
Beachten Sie, dass dabei ein auf dem Stack abgelegter Wertetyp einem Referenztyp zugewiesen wird, der auf dem Heap gespeichert ist. Der als »Boxing« bezeichnete Vorgang erfordert natürlich einen Mehraufwand der Laufzeitumgebung im Vergleich zu einer Operation, bei der eine Referenzvariable der Objekt-Variablen zugewiesen wird.
Zu einem bestimmten Zeitpunkt soll die implizite Konvertierung auch wieder rückgängig gemacht werden. Bei dieser als »Unboxing« bezeichneten Operation muss der korrekte Zieldatentyp angegeben werden:
int item = (int)@object;
Listing 6.12 Unboxing eines Integers
Aus einem auf dem Heap verwalteten Objekt wird nunmehr erneut ein Objekt, das auf dem Stack liegt. Auch dieser Vorgang geht deutlich zu Lasten der Performance. Microsoft selbst gibt dazu in der Dokumentation einen Faktor von bis zu 20 an, der aber wohl selten erreicht werden dürfte. Dennoch sollten Sie sich merken, dass die Boxing-Operationen nach Möglichkeit in einem Programm vermieden werden sollten – auch wenn das natürlich nicht immer möglich ist.
Ihre Meinung
Wie hat Ihnen das Openbook gefallen? Wir freuen uns immer über Ihre Rückmeldung. Schreiben Sie uns gerne Ihr Feedback als E-Mail an kommunikation@rheinwerk-verlag.de.