Zurück   Flashforum > Flash > ActionScript > Softwarearchitektur und Entwurfsmuster

Antwort
 
LinkBack Themen-Optionen Ansicht
Alt 19-02-2003, 12:57   #1 (permalink)
LastActionScriptHero
 
Benutzerbild von k7c4
 
Registriert seit: Apr 2002
Beiträge: 572
Post primitive Datentypen und Methoden

Ich weiss nicht, ob es allen sobekannt ist, aber wenn man sich folgendes mal anschaut
ActionScript:
  1. Number.prototype.r = function(r)
  2. {void 1;}
  3. trace(1)
  4.  
  5. x=1
  6. var remC = getTimer()
  7. for (var i=0; i< 1000; i++)
  8. {
  9.     x.r()
  10. }
  11. trace(getTimer()-remC)
  12.  
  13. x= Number(1)
  14. var remC = getTimer()
  15. for (var i=0; i< 1000; i++)
  16. {
  17.     x.r()
  18. }
  19. trace(getTimer()-remC)
  20. x=new Number(1)
  21. var remC = getTimer()
  22. for (var i=0; i< 1000; i++)
  23. {
  24.     x.r()
  25. }
  26. trace(getTimer()-remC)
dann wird klar, dass jeder Aufruf von Methoden, die zu primitiven Datentypen gehören zu einer impliziten Umwandlung in ein Objekt des Primitiven Datentypes führt, es sei denn, das Ding wurde über new erzeugt
__________________
All your AS are belong to us! haha!
Beweise heute Deine Tierliebe: Schlage nie ein totes Pferd!
k7c4 ist offline   Mit Zitat antworten
Alt 19-02-2003, 13:03   #2 (permalink)
www.penck.de
 
Benutzerbild von borisp
 
Registriert seit: Jan 2002
Ort: Wiesbaden / Mainz-Kastel
Beiträge: 926
Ich weiss nicht, mir schwanken die Zahlen zu sehr... 3 Testläufe:

1
182
190
153

1
158
192
156

1
155
183
185

Das unterste zeigt, das auch x=new Number(1) langsamer sein kann. Trotzdem interessanter ansatz.
borisp ist offline   Mit Zitat antworten
Alt 19-02-2003, 13:07   #3 (permalink)
LastActionScriptHero
 
Benutzerbild von k7c4
 
Registriert seit: Apr 2002
Beiträge: 572
Dann mach mal aus der 1000 in der for-Schleife eine 10000
__________________
All your AS are belong to us! haha!
Beweise heute Deine Tierliebe: Schlage nie ein totes Pferd!
k7c4 ist offline   Mit Zitat antworten
Alt 19-02-2003, 13:46   #4 (permalink)
helpQLODhelp
 
Benutzerbild von bokel
 
Registriert seit: Feb 2002
Ort: Köln
Beiträge: 8.505
Yup,
bei Strings sieht man es auch sehr deutlich:

ActionScript:
  1. t = getTimer();
  2. s = "Hallo";
  3. for(i=0; i<1000; i++){
  4.     x = s.charAt(3);   
  5. }
  6. trace(getTimer()-t);
  7.  
  8. t = getTimer();
  9. s = new String("Hallo");
  10. for(i=0; i<1000; i++){
  11.     x = s.charAt(3);   
  12. }
  13. trace(getTimer()-t);

Ausgabe
101
63

mfg r.
bokel ist offline   Mit Zitat antworten
Alt 19-02-2003, 15:06   #5 (permalink)
www.penck.de
 
Benutzerbild von borisp
 
Registriert seit: Jan 2002
Ort: Wiesbaden / Mainz-Kastel
Beiträge: 926
Hm, joa - so langsam wird das interessant und sogleich auch logisch.


Wenn ich new String("Foo") mache braucht Flash kein eigenes Type-Casting zu machen um den Typ der Variable zu bestimmen - was auf jedenfall Zeit beansprucht. Dann noch die zuweisung von Methoden an ein String "Objekt".

Interessant bei größeren Sachen, die viele Variablen zuweisungen in schneller Abfolge machen müssen.
borisp ist offline   Mit Zitat antworten
Alt 19-02-2003, 15:09   #6 (permalink)
www.penck.de
 
Benutzerbild von borisp
 
Registriert seit: Jan 2002
Ort: Wiesbaden / Mainz-Kastel
Beiträge: 926
Folgendes Script allerdings

ActionScript:
  1. t = getTimer();
  2. for(i=0; i<10000; i++){
  3.     s = "Hallo";
  4. }
  5. trace(getTimer()-t);
  6.  
  7. t = getTimer();
  8. for(i=0; i<10000; i++){
  9.     s = new String("Hallo");
  10. }
  11. trace(getTimer()-t);

484
1110

Also ist ein new String bei der zuweisung schon derb langsamer. Es macht nur der Methodenaufruf einen Unterschied - schön wäre zu wissen warum.
borisp ist offline   Mit Zitat antworten
Alt 19-02-2003, 15:41   #7 (permalink)
LastActionScriptHero
 
Benutzerbild von k7c4
 
Registriert seit: Apr 2002
Beiträge: 572
ActionScript:
  1. String.prototype.test = function()
  2. {
  3. trace("--->" + [typeof this , this])
  4. }
  5. x = "hallo"
  6. trace([typeof x,x])
  7. x.test()
  8. trace([typeof x,x])
  9.  
  10.  
  11. x = new String()
  12. trace([typeof x,x])
  13. x.test()
  14. trace([typeof x,x])

wenn x ein primitiver Datentyp String ist, wird bei jedem Aufruf von einer String-Methode eine Kopie von x in ein String-Objekt verwandelt. Wenn x ansich schon ein String-Objekt ist, fällt das natürlich flach. Das muss man sich so vorstellen.
ActionScript:
  1. // wenn ich mache
  2. x = "wurst";
  3. x.test()
  4.  
  5. //wird intern so etwa wie dieses gemacht
  6. x = "wurst"
  7. if(typeof x != "object")
  8. {
  9. temp = new String(x)
  10. }
  11. else
  12. {
  13. temp = x
  14. }
  15. temp.test()
__________________
All your AS are belong to us! haha!
Beweise heute Deine Tierliebe: Schlage nie ein totes Pferd!

Geändert von k7c4 (19-02-2003 um 15:42 Uhr)
k7c4 ist offline   Mit Zitat antworten
Antwort

Lesezeichen

Themen-Optionen
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks sind an
Pingbacks sind an
Refbacks sind an



Alle Zeitangaben in WEZ +1. Es ist jetzt 15:40 Uhr.

Domains, Webhosting & Vserver von Host Europe
Unterstützt das Flashforum!
Adobe User Group


Copyright ©1999 – 2012 Marc Thiele