schau mal, ob Dir das vielleicht weiterhilft:
http://www.cbetta.com/blog/index.cfm/2006/7/26/array-vs-array-collection-in-flex-2-with-a-coldfusion-slant
Ich benutz dennoch gerne einfache Arrays, solange ich die Funktionalität die ArrayCollection bietet gar nicht brauche.
Das ist auch ein bisserl Geschmackssache...
das kann man pauschal so nicht sagen ... Arrays sind bedeutend performanter ... heutzutage kacken ja alle Ressourcen, aber man sollte es nicht übertreiben ...
ArrayCollection ist durch einen Proxy gebaut ... d.h. sowohl Zugriffe, als auch Iterationen dauern länger, denn ein einfacher Array Lese- oder Schreibzugriff resultiert in einem Funktionscall, z.B. für Leseoperationen diesem (ListCollectionView::flash_proxy::getProperty):
override flash_proxy function getProperty(name:*):*
{
if (name is QName)
name = name.localName;
var index:int = -1;
try
{
// If caller passed in a number such as 5.5, it will be floored.
var n:Number = parseInt(String(name));
if (!isNaN(n))
index = int(n);
}
catch(e:Error) // localName was not a number
{
}
if (index == -1)
{
var message:String = resourceManager.getString(
"collections", "unknownProperty", [ name ]);
throw new Error(message);
}
else
{
return getItemAt(index);
}
}
ein gewöhnlicher Array-access wird direkt von der runtime ausgeführt ... ist also deutlich schneller ...
vollständige Iterationen über Proxies, wie hier, resultieren in mindestens 2*n+1 calls (wenn n die anzahl der Elemente/Schlüssel ist) ... auch hier ist das Array also deutlich effizienter ...
Arrays sollte man also dringend bei performance-kritischen sachen verwenden (am besten natürlich gleich Vector, wenn man flash 10 targetet) ...
außerdem kann man so code schreiben, der flexunabhängig ist, und den man dann in flexlosen Projekten (sei's jetzt Flash CS3/4, oder pures AS3 (z.B. wegen Größenrestriktion)) wiederverwenden kann ...
übrigens sind einige der auf dem obigen blog genannten Vorteile von ArrayCollection garkeine Vorteile, denn sie stehen bei Array genauso zur verfügung ... man müsste halt nur alle Arraymethoden kennen ... :)
außerdem bietet ArrayCollection nicht so coole Methoden wie splice und slice geschweigedenn map, filter und co. ...
ich würde ArrayCollection ausschließlich als data provider verwenden, bzw. evtl. für remoting ...greetz
back2dos
Beiträge: 160 Wohnort: hamburg Registriert: Feb 2005
Themenautor/in
danke für deine ausführliche antwort.
was die performance angeht habe ich das auch gerade von einen nicht-flasher/nicht-flexer gehört.
mit den methoden guck ich mir das morgen dann mal an. vielen dank!Gruß,
Höhfo
ArrayCollection::source hilft natürlich, wobei der Zugriff auch recht teuer ist ...
ein call, ein nullcheck, ein typecheck, ein cast, ein call und ein statischer memberaccess ...
kann man nur verkürzen, wenn man sich das dann in einer lokalen Variable zwischenspeichert, aber dann hätte man ja gleich ein Array nehmen können, zumal dann die Bindings wiederum nicht mehr feuern ... :D
also letztendlich ist es Performance+erheblich niedrigerer Memory Footprint vs. Bindability+und Implementierung von IExternalizable (wobei ich eigentlich glaube, dass man Arrays auch direkt per IDataInput::readObject bzw. IDataOutput::writeObject serialisieren kann) sowie IList ...
muss man letztendlich einfach nach Anforderung abwägen ...greetz
back2dos
12.01.12, 18:50 #Jobs Flash Freelancer für ca. 2 Wochen in München gesucht http://t.co/XpMJr5dv
10.01.12, 10:45 #PureMVC vs #RobotLegs Performance Battle. PureMVC is significantly faster than RobotLegs in nearly every respect. http://t.co/324gWRAr