Leistungsoptimierung für die ADOBE FLASH-PLATTFORM
Leistungsoptimierung für die ADOBE® FLASH®-PLATTFORM
Leistungsoptimierung für die ADOBE® FLASH®-PLATTFORM
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