Zurück   Flashforum > Flash > Stuff

Antwort
 
LinkBack Themen-Optionen Ansicht
Alt 25-12-2004, 17:55   #1 (permalink)
Neuer User
 
Benutzerbild von the binary
 
Registriert seit: Jul 2001
Ort: Berlin | Friedrichshain
Beiträge: 3.561
[stuff] Script-Time-Tool

hey folks...

oft steht man vor einem problem, man löst es und fragt sich dann,
ob es nicht vielleicht noch eine performantere variante gibt.

konkret hat mich der performance-unterschied zwischen array und string methoden interessiert.
und um die zeitlichen unterschiede zu messen,
hab ich mir dieses tool gebastelt.

vielleicht kanns der eine oder andere ja gebrauchen...

also die ToolsClass...

ActionScript:
  1. /*****************
  2. * author: david linse (aka the binary)
  3. * date : 2004/12/24
  4. * version: 0.1
  5. *
  6. * description:
  7. * - klasse bietet funktionen zum stoppen script-ausführungs-zeiten
  8. * - die übergabe von Flags an die methoden bestimmt das format des rückgabe wertes
  9. * - #stop ruft löst anonyme 'onFinish' funktion aus und übergibt info-object
  10. * -> use to save and compare results
  11. * static methods:
  12. *                        #start
  13. *                        #stop_intermediate
  14. *                        #stop
  15. */
  16.  
  17. class Tools
  18.  
  19. {
  20.     private static var d : Date = new Date();
  21.     private static var start_time : Number = 0;
  22.     private static var inter_time : Number = 0;
  23.     private static var end_time   : Number = 0;
  24.     private static var script_time : Number = 0;
  25.     private static var cnt : Number = 0;
  26.  
  27.  
  28.     // @param n:Number
  29.     // pass 1 to get informed about start
  30.     public static function start()
  31.     {
  32.         Tools.start_time = Tools.inter_time = new Date().getTime();
  33.                 Tools.script_time = 0;
  34.         if(arguments[0]==1) trace('TOOLS.START!\n');
  35.      }
  36.  
  37.     // @param n:Number
  38.     // pass 1 to get info-trace
  39.     // pass 0 to get formated string
  40.     // pass void to get value as Number
  41.     public static function stop()
  42.     {
  43.  
  44.         Tools.end_time = new Date().getTime();
  45.  
  46.         var total_exec_time:Number = (Tools.end_time - Tools.start_time)/1000;
  47.         var info:Object;
  48.         _root.onFinish( info = { data: {
  49.                                     total_exec_time : total_exec_time,
  50.                                     average_time: ( Tools.script_time/Tools.cnt ),
  51.                                     exec_time : Tools.script_time,
  52.                                     cnt: Tools.cnt
  53.                                    }
  54.                                   });
  55.  
  56.         Tools.cnt = 0;
  57.         Tools.start_time = 0;
  58.         Tools.inter_time = 0;
  59.         Tools.end_time   = 0;
  60.  
  61.         if(arguments[0]==1) trace('\nTOTAL.TIME: '+ total_exec_time + ' sec : SCRIPT.TIME: '+ Tools.script_time +'\n');
  62.         if(arguments[0]==0) return('\nTOTAL.EXECUTION TIME: '+ total_exec_time + ' sec\n');
  63.  
  64.         return total_exec_time;
  65.     }
  66.  
  67.     // @param void
  68.     // saves time to calculate intermediate time
  69.     public static function stop_intermediate()
  70.     {
  71.         return Tools.inter_time = new Date().getTime();
  72.     }
  73.    
  74.     // @param n:Number
  75.     // pass 1 to get info-trace
  76.     // pass 0 to get formated string
  77.     // pass void to get value as Number
  78.     public static function getTime()
  79.     {
  80.         var t:Number = (new Date().getTime() - Tools.inter_time) / 1000;
  81.  
  82.         Tools.script_time = (Tools.script_time + t)
  83.         Tools.cnt++;
  84.  
  85.         if(!Tools.start_time)
  86.         {
  87.              trace('TOOLS.ERROR! NO EXECUTION START TIME\n');
  88.              return false;
  89.         }
  90.  
  91.              if(arguments[0]==1) trace('TOOLS.INTERMEDIATE TIME: '+ t + ' sec');
  92.              if(arguments[0]==0) return('TOOLS.INTERMEDIATE TIME: '+ t + ' sec');
  93.  
  94.              return t;
  95.     }
  96. }
  97.  
  98.  
  99. //SAMPLE
  100. //how long it takes to fill an array with 70000 elements ?
  101.  
  102. var i: Number = 100;   // number of chars in string && array_elements
  103. var e: Number = 700// number of elements in array
  104.  
  105. var arr: Array = new Array();
  106.  
  107. // create and fill array
  108. function build_test_area()
  109. {
  110.     for(var z:Number=0; z<e; z++)
  111.     {
  112.         var scnt = i;
  113.    
  114.         while( --scnt+1 )
  115.         {
  116.             str += random(8)+2;
  117.         }
  118.         arr.push( str );
  119.     }
  120.     return (true);
  121. }
  122.  
  123. // USAGE #1
  124. // traces 'start' and 'finish'
  125. Tools.start(1);
  126. if( build_test_area() ) Tools.stop(1);
  127.  
  128. // USAGE #2
  129. // fills a textfield with formated result-string
  130. Tools.start(0);
  131. if( build_test_area() ) tf.text = Tools.stop(0);

dieses script erhebt nicht den anspruch auf vollständigkeit...
viel spass damit...


ps: konstruktive kritik erwünscht...
__________________
8bm | join ff@BOINC
formpackage.org | audiohunter.de | problematica.de | 8ball-media.de/blog | taikonauten.cn

Geändert von the binary (25-12-2004 um 18:05 Uhr)
the binary ist offline   Mit Zitat antworten
Alt 25-12-2004, 19:09   #2 (permalink)
-
 
Registriert seit: Apr 2004
Beiträge: 397
Das ist also eine Art Benchmarktool ?

Wenn ich mich nicht Täusche, ist "--scnt+1" ziemlich lustig. "scnt" würde doch auch genügen. OK, "25+scnt-25" wäre besser

Gruss
Wulfie
... kein Plan von konstruktiver Kritik
__________________
_
Wulfie ist offline   Mit Zitat antworten
Alt 27-12-2004, 14:33   #3 (permalink)
Neuer User
 
Benutzerbild von the binary
 
Registriert seit: Jul 2001
Ort: Berlin | Friedrichshain
Beiträge: 3.561
benchmark-tool is wohl zu hoch gegriffen...

kannst halt damit messen, wiel lange zum beispiel eine schleife gelaufen ist,
und dir die zeit in verschiedenen varianten ausgeben lassen...

einfach mal ein bisschen mit rumspielen...

gruss
__________________
8bm | join ff@BOINC
formpackage.org | audiohunter.de | problematica.de | 8ball-media.de/blog | taikonauten.cn
the binary ist offline   Mit Zitat antworten
Alt 27-12-2004, 14:37   #4 (permalink)
nky
Bontempi Punk
 
Benutzerbild von nky
 
Registriert seit: Dec 2001
Ort: Dtld/Pfalz
Beiträge: 4.185
ich werds mir mal vorknöpfen ..looks nice ! thx !

Anregung
-packagenamen.. de.binary usw...
- rückgabewerte für die methoden also zb Number...

anonsten muss ich erstmal mit rumspielen
Gruss nky
nky ist offline   Mit Zitat antworten
Alt 27-12-2004, 14:56   #5 (permalink)
Neuer User
 
Benutzerbild von the binary
 
Registriert seit: Jul 2001
Ort: Berlin | Friedrichshain
Beiträge: 3.561
is ja quasi noch ein 'grundgerüst'...
die package namen hab ich absichtlich weggelassen ->schreibfaul
vielleicht ändere ich es noch..

vielleicht sei an dieser stelle nochmal auf die 'onFinish' function
hingewiesen.
damit lässt die ganz leicht ein vergleich von z.b. 2 testreihen (array vs string)
realisieren...

btw: vielleicht sollte man das event auch parameter-abhängig machen ?

ActionScript:
  1. // beispiel *
  2.  
  3. // container für messergebnisse
  4. var arr:Array = new Array()
  5.  
  6. // listener function
  7. function onFinish( info:Object )
  8. {
  9.    arr.push(info)
  10.  
  11.   if(arr.length >= 2)
  12.   {
  13.     var w1 = arr[0].data.average_time;
  14.     var w2 = arr[1].data.average_time;
  15.  
  16.     var x = (w1>w2) ? (w1/w2) : (w2/w1);
  17.  
  18.     trace( 'test1 is '+ x +' times faster than test2' );
  19.   }
  20. }

*ausm kopf, sollte aber funzen...

gruss
__________________
8bm | join ff@BOINC
formpackage.org | audiohunter.de | problematica.de | 8ball-media.de/blog | taikonauten.cn
the binary 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 18:37 Uhr.

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


Copyright ©1999 – 2012 Marc Thiele