Don P: OOP, garbage collection, performance...

Hallo Leute,

Mein relativ umfangreiches Script arbeitet mit Objekten und z.T. großen Arrays.
Es wird z.B. ein Array mit 10'000 Elementen abgearbeitet. Anfangs läuft die Sache recht schnell, extrem schnell sogar in Opera, aber so ab dem 2000sten Array-Element wird das Script auch in Opera spürbar langsamer und braucht gegen Ende ca. eine ganze Sekunde, um nur ein einziges Array-Element zu verarbeiten. Die Speichernutzung wächst auch setig an.

Ist das normal? Woran kann das liegen?

Das Script erzeugt nach Herzenslust neue Objekte und Arrays, allerdings werden die alten dabei überschrieben. Das sollte doch die garbage-collection automatisch sauber erledigen und es sollte nicht zum Performance-Einbruch bzw. wachsendem Speicherverbrauch kommen.

Ein Beispiel ist folgende Objekt-Methode, die ein Array erzeugt und zurückgibt (die Number()-Funktion ist eine spezielle, nicht die normal eingebaute):

  
            betNums: function(s, col, verbose) {  
  
                var bet = [],  
                    sInfo = this.ps[s][0],  
                    k = sInfo.k,  
                    num = function (val, mirrored) {  
  
                        if (!verbose) return val;  
  
                        return (function() {  
  
                            var betNum = new Number(val);  
                            betNum.hit = (mirrored && col) || 37-col;  
                            return betNum;  
                        })();  
                    }  
                ;  
  
                while (col < 37) {  
  
                    if (col <= sInfo.tol) {  
  
                        bet.push( num(k.atPos[col-1],false) );  
  
                    } else if (col > 36-sInfo.tol) {  
  
                        bet.push( num(k.atPos[col],true) );  
  
                    } else {  
  
                        bet.push( num(k.atPos[col-1],false) );  
                        bet.push( num(k.atPos[col],true) );  
                    }  
  
                    col += s;  
                }  
  
                return bet.sort(function (a,b) {return a-b;});  
            },  

Gruß, Don P