Frage

Ich habe eine große delphi Anwendung und ich versuche, den Speicherbedarf niedrig zu halten.

In meinem Programm Ich verwende eine Komponente (Taco) und eine Komponente (TBurrito), die erbt von Taco. Jetzt nur noch über die Speichernutzung der Klassen und nicht die tatsächlichen Instanzen, das Szenario mehr Speicher verwendet?

A. Mit nur die TBurrito Komponente überall

oder

B. Mit einer Kombination aus Taco und TBurrito Komponenten?

Mein einziger Gedanke ist, dass seit TBurrito inherits Taco, die Klasse Taco bereits im Speicher gespeichert wird und deshalb mit ihm wird die Stellfläche des Speichers nicht erhöhen, dass viel.

* Hinweis -. Die Komponentennamen sind nicht wirklich Taco und Burrito

War es hilfreich?

Lösung

Jede Instanz Burrito wird mindestens so viel Speicher wie eine Instanz von Taco besetzen. Subtrahiert Taco.InstanceSize von Burrito.InstanceSize, um herauszufinden, wie viel mehr.

Mit Burrito ausschließlich werden Sie keine Speicher speichern; die Definition von Taco wird noch existieren, auch wenn Sie keine Instanzen dieser Klasse genau, weil, zumindest aber, Burrito.ParentClass noch darauf verweisen muss.

Verwenden Sie die kleinste Komponente, die Ihren Bedürfnissen erreicht, aber es sei denn, Burrito ist großen im Vergleich zu Taco oder Sie haben eine große Anzahl von Burrito Instanzen, die Taco Instanzen statt sein könnte, sind Sie wahrscheinlich nicht gehen sehen viel Gesamteffekt auf die Speicherauslastung. Das kommt von darauf verzichten Laden ganze Formen oder Laden nur Teile einer Datei anstatt die ganze Sache.

Andere Tipps

Klassen verwenden nur Speicher für ihre VMTs. Bis Sie tatsächlich Instanz einer Klasse, ist es nicht Raum einnehmen, sondern für die VMT, und es gibt nur eine VMT für jede Klasse. Die VMT Größe hängt nur von der Anzahl der virtuellen Methoden eine Klasse eigentlich, denn es gibt einen Eintrag für jede virtuelle Methode ist. Statische Methoden werden bei der Kompilierung aufgelöst und nicht Speicherplatz. Andere VMT Daten werden in einem feste Größe (obwohl in anderer Version von Delphi unterschiedlich sein). Dynamische Methoden wurden eingeführt zu halten VMTs kleiner. Das ist, weil eine Klasse erbt eine neue VMT mit allen „Slots“ von virtuellen Methoden der Elternklasse, sowie die, die von der vererbten Klasse erstellen. Dynamische Methoden verwenden Laufzeitcode zu sehen Dispatching für die Methode aufgerufen werden. Weil sie etwas langsamer sind, wurde ihre Verwendung vorgeschlagen nur für Klassen, die nur wenige Methoden der sehr großen übergeordneten Klassen außer Kraft gesetzt haben. Wenn der Speicher kein Problem ist, gibt es keine Gründe, sie zu nutzen. Was könnte auch Speicherplatz sind RTTI Informationen verwenden, obwohl ich nie untersuchen, wo, wie sie gespeichert sind. Wie auch immer, wenn Sie ein Kind Klasse verwenden, sollte seine Eltern VMT auch erforderlich sein, weil das Kind Klasse geerbten nennen kann. Aber es sei denn, Sie verwenden sehr große Klasse, die mit vielen virtuellen Methoden und wenige Fälle, ich denke, die meisten der Speicher von der Anwendung verwendet werden sein, dass die Klasseninstanzen, nicht Klasse VMTs.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top