Det är ju så hett just nu att Flash Player kommer till mobila-enheter (frtm. iPhone) så måste man börja tänka på prestandan lite mer än tidigare.
Vector är en intressant klass som jag känt till sen ett tag tillbaka, men jag har aldrig riktigt testat den.
Vector är en Array men skillnad mellan new Array och new Vector är:
Array
- Array kan innehålla olika typer av data så som
- Array är långsammare
Vector
- Vector kan också innehålla flera datatyper, men används helst för samma datatyp.
exempelvis bara siffror eller bara strängar eller bara Sprites - Vector är snabbare
Följande är tagen härifrån:
Förutom datatypsbegränsningen innehåller klassen Vector andra begränsningar som skiljer den från klassen Array:
- En Vector är en kompakt array. Till skillnad från en Array, som kan ha indexvärden för 0 och 7 även om inga värden finns på positionerna 1 till 6, måste en Vector ha ett värde (eller
null) för varje index. - En Vector kan ställas in så att den har fast längd, vilket betyder att det antal element den innehåller inte kan ändras.
- Åtkomsten till element tillhörande en Vector är avgränsningskontrollerad. Du kan aldrig läsa ett värde från ett index som är större än det sista elementet (
length - 1). Du kan aldrig sätta ett värde med ett index större än ett över det aktuella sista indexet (du kan alltså bara sätta ett värde vid ett existerande index eller vid index-([length]).
Tack vare sina begränsningar har en Vector två stora fördelar gentemot en Array-instans vars element alla är instanser av en enda klass:
- Prestanda: åtkomst och upprepning av arrayelement går mycket snabbare när du använder en Vector-instans än när du använder en Array.
- Typsäkerhet: i strikt läge kan kompileraren identifiera datatypfel som till exempel tilldelning av ett värde av fel datatyp till en Vector, eller förutse fel datatyp när den läser ett värde från en Vector. Observera: när metoderna
push()ellerunshift()används för att lägga till värden till en Vector kontrolleras inte argumentets datatyp vid kompileringen utan vid körningen.
Till lilla testet nu...
Jag skapar en Vector här som innehåller bara strängar
Däremot, om jag skulle byta ut en av Strängar till ett nummer (int)
Men om jag envisas med sträng blandningen med siffror då kan jag skriva så:
Nu, prestandan...
Ett enkelt sätt att köra detta och se skillnader kan vara så
men kör jag samma för Array
och om jag blandar olika typer av data i Vector, så ser det ut så
och byter jag istället tillbaka till var arr:Array = new Array(); och körde samma kod som den precis ovan, då fick jag ut så mycket som 70.
Intressant, eller hur ?
EDIT:
Patric tipsade om en bra länk gällandes prestanda, kolla här!
















Kommentarer
www.bytearray.org/?p=1363
perfa Patric, jag lägger till den i inlägget så det alltid finns synligt :)
Detta är väl en grov förvrängning av sanningen? En Vector kan bara innehålla objekt som uppfyller den datatyp som specificerades när vektorn skapades. För att kunna använda olika datatyper måste man specificera en basklass, och sedan måste samtliga objekt i vektorn vara antingen av den typen, eller en sub-typ.
RSS-flöde för kommentarer på denna post.