1&1 DSL
Flashhilfe.de - Flash Community

ArrayCollection <--> Array (Verständnisfrage) [Flash 10]

Forum > Apache Flex / Adobe AIR > ArrayCollection <--> Array (Verständnisfrage)

 


AntwortenRegistrieren Seite1

 26.03.2009, 17:45 
Beiträge: 160
Wohnort: hamburg
Registriert: Feb 2005

ArrayCollection <--> Array (Verständnisfrage)
Flex-Newbie-Frage:

Wozu sollte man Array benutzen, wenn man mit ArrayCollection scheinbar mehr machen kann?

Hat "einfaches" Array irgendein Vorteil, was ich noch nicht erkannt/gefunden habe?
Gruß,
Höhfo




|| follow me on twitter ||
 26.03.2009, 18:52Re1
Beiträge: 89
Registriert: Mar 2009

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
Geändert von giraffa am 26.03.09 um 18:53 Uhr

 26.03.2009, 19:31Re2
Beiträge: 160
Wohnort: hamburg
Registriert: Feb 2005

Themenautor/in

Okay, danke... also kein Grund ArrayCollection nicht zu nutzen


PS: ... und kein Grund "normales" Array zu nutzen...
Gruß,
Höhfo




|| follow me on twitter ||
Geändert von hoehfo am 26.03.09 um 19:32 Uhr

 
nicht sichtbar bei eingeloggten Mitgliedern
 26.03.2009, 19:45Re3
Beiträge: 89
Registriert: Mar 2009

Ich benutz dennoch gerne einfache Arrays, solange ich die Funktionalität die ArrayCollection bietet gar nicht brauche.
Das ist auch ein bisserl Geschmackssache...
Geändert von giraffa am 26.03.09 um 19:45 Uhr

 26.03.2009, 20:10Re4
Beiträge: 160
Wohnort: hamburg
Registriert: Feb 2005

Themenautor/in

jo, kann ich mir vorstellen. besonders, wenn man von anderen Sprachen das so gewöhnt ist
Gruß,
Höhfo




|| follow me on twitter ||
 26.03.2009, 21:45Re5
Benutzerbild von BackToDos
Beiträge: 571
Wohnort: LE
Registriert: Apr 2006

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):
ActionScript:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
    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
Geändert von BackToDos am 26.03.09 um 22:08 Uhr

 
nicht sichtbar bei eingeloggten Mitgliedern
 26.03.2009, 22:04Re6
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




|| follow me on twitter ||
Geändert von hoehfo am 26.03.09 um 22:08 Uhr

 26.03.2009, 22:07Re7
Benutzerbild von zidaninho
Beiträge: 61
Registriert: Jan 2009

Was die Performance angeht hast du sicherlich recht.

Aber wenn ich mit ArrayCollection.source auf das Array der Collection zugreife, lässt dies dann auch die Performace in den Keller gehen?

Für Bindings ist die Collection aber auf jeden Fall Vorteilhafter, da man bei Änderungen nicht immer die refresh()-Methode aufrufen muss.

LG
 26.03.2009, 22:31Re8
Benutzerbild von BackToDos
Beiträge: 571
Wohnort: LE
Registriert: Apr 2006

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
Geändert von BackToDos am 27.03.09 um 18:54 Uhr

 
Themen
Ähnliche Beiträge zum Thema
 
AntwortenRegistrieren Seite1

Schnellantwort

Du musst registriert sein, um diese Funktion nutzen zu können.
Partner Webseiten: DesignerInAction.de   Designnation.de   Mediengestalter.info   php-resource.de   phpforum.de   phpwelt.de   Pixelio.de   PSD-Tutorials.de   Tutorials.de

Haftungsausschluss   Datenschutzerklärung   Hier Werben   Impressum
© 1999-2012 Sebastian Wichmann - Flashhilfe.de