30.07.2012 Aufrufe

Leistungsoptimierung für die ADOBE FLASH-PLATTFORM

Leistungsoptimierung für die ADOBE® FLASH®-PLATTFORM

Leistungsoptimierung für die ADOBE® FLASH®-PLATTFORM

MEHR ANZEIGEN
WENIGER ANZEIGEN

Erfolgreiche ePaper selbst erstellen

Machen Sie aus Ihren PDF Publikationen ein blätterbares Flipbook mit unserer einzigartigen Google optimierten e-Paper Software.

LEISTUNGSOPTIMIERUNG FÜR DIE <strong>FLASH</strong>-<strong>PLATTFORM</strong><br />

Einsparen von Arbeitsspeicher<br />

var mySprite:Sprite = new Sprite();<br />

// Set the reference to null, so that the garbage collector removes<br />

// it from memory<br />

mySprite = null;<br />

Berücksichtigen Sie, dass ein Objekt nicht unbedingt aus dem Arbeitsspeicher entfernt wird, wenn es auf null<br />

eingestellt ist. In manchen Fällen wird <strong>die</strong> Speicherbereinigung nicht ausgeführt, wenn der verfügbare Arbeitsspeicher<br />

nicht als niedrig genug eingestuft wird. Das Verhalten der Speicherbereinigung lässt sich nicht mit Sicherheit<br />

voraussagen. Die Speicherbereinigung wird nicht durch das Löschen von Objekten, sondern durch <strong>die</strong> Zuweisung von<br />

Arbeitsspeicher ausgelöst. Wenn <strong>die</strong> Speicherbereinigung ausgeführt wird, werden Diagramme der Objekte gefunden,<br />

<strong>die</strong> noch nicht bereinigt wurden. Inaktive Objekte in den Diagrammen werden erkannt, indem Objekte ermittelt<br />

werden, <strong>die</strong> aufeinander verweisen, aber nicht mehr von der Anwendung verwendet werden. Inaktive Objekte, <strong>die</strong> auf<br />

<strong>die</strong>se Weise erkannt wurden, werden gelöscht.<br />

Bei großen Anwendungen kann <strong>die</strong>ser Vorgang <strong>die</strong> CPU stark beanspruchen und <strong>die</strong> Leistung sowie <strong>die</strong><br />

Anwendungsgeschwindigkeit deutlich beeinträchtigen. Reduzieren Sie <strong>die</strong> Ausführungshäufigkeit der<br />

Speicherbereinigung, indem Sie Objekte so oft wie möglich wiederverwenden. Außerdem sollten Sie <strong>die</strong> Verweise<br />

nach Möglichkeit auf Null setzen, damit bei der Speicherbereinigung weniger Zeit zum Suchen der Objekte anfällt.<br />

Stellen Sie sich <strong>die</strong> Speicherbereinigung als eine Art Versicherung vor, und versuchen Sie stets, den Lebenszyklus der<br />

Objekte explizit zu verwalten, sofern möglich.<br />

Hinweis: Wenn der Verweis auf ein Anzeigeobjekt auf Null gesetzt wird, ist nicht gewährleistet, dass das Objekt fixiert<br />

wird. Das Objekt belegt auch weiterhin CPU-Ressourcen, bis es der Speicherbereinigung zugeführt wird. Achten Sie<br />

darauf, dass das Objekt ordnungsgemäß deaktiviert wurde, bevor Sie seinen Verweis auf null setzen.<br />

Die Speicherbereinigung kann mithilfe der System.gc()-Methode gestartet werden, <strong>die</strong> in Adobe AIR sowie in der<br />

Debugger-Version von Flash Player zur Verfügung steht. Über den Profiler in Adobe® Flash® Builder können Sie <strong>die</strong><br />

Speicherbereinigung manuell starten. Über <strong>die</strong> Ausführung der Speicherbereinigung können Sie <strong>die</strong> Reaktionsweise<br />

der Anwendung beobachten und feststellen, ob Objekte korrekt aus dem Arbeitsspeicher gelöscht werden.<br />

Hinweis: Wenn ein Objekt als Ereignis-Listener verwendet wurde, kann ein anderes Objekt darauf verweisen. In <strong>die</strong>sem<br />

Fall sollten Sie <strong>die</strong> Ereignis-Listener mithilfe der removeEventListener()-Methode entfernen, bevor Sie <strong>die</strong> Verweise<br />

auf null setzen.<br />

Die von Bitmaps belegte Arbeitsspeichermenge kann unmittelbar verringert werden. Beispielsweise enthält <strong>die</strong><br />

BitmapData-Klasse <strong>die</strong> dispose()-Methode. Im nächsten Beispiel wird eine BitmapData-Instanz mit einer Größe<br />

von 1,8 MB erstellt. Die aktuell belegte Arbeitsspeichermenge erhöht sich auf 1,8 MB und <strong>die</strong> System.totalMemory-<br />

Eigenschaft gibt einen kleineren Wert zurück:<br />

trace(System.totalMemory / 1024);<br />

// output: 43100<br />

// Create a BitmapData instance<br />

var image:BitmapData = new BitmapData(800, 600);<br />

trace(System.totalMemory / 1024);<br />

// output: 44964<br />

Nun wird <strong>die</strong> BitmapData-Instanz manuell aus dem Arbeitsspeicher entfernt und <strong>die</strong> Arbeitsspeicherbelegung wird<br />

erneut geprüft:<br />

Letzte Aktualisierung 9.5.2012<br />

13

Hurra! Ihre Datei wurde hochgeladen und ist bereit für die Veröffentlichung.

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!