Aha, je nach Status benutzt ihr also die oder die remove-Methode, und löscht erst nachher. Das ist clever, allerdings auch langsamer als die Liste vorher zu kopieren. Ausserdem würde ich keinen boolean dafür benutzen, sondern ie betroffenen Methoden direkt austauschen. mfg r. ----- Original Message ----- From: "Holger Kohnen" <h_kohnen@xxxxxx> To: <ascoders@xxxxxxxxxxxxx> Sent: Saturday, April 19, 2003 6:20 PM Subject: [ascoders] [ascoders]ASBroadcaster - Bug behoben - Performanz vorhanden > Hi Leute, > > das hat mir und Carsten Müller keine Ruhe gelassen, > wir haben jetzt ein interessantes Ergebniss: > > - On-broadcastMessage-Listener-Remove-Bug ist behoben. > - Die broadcastMessage-Geschwindigkeit ist identisch. > - Das Entfernen von Listenern beim senden geht über 40mal schneller. > > Testet das doch mal bitte, vielleicht sind wir ja auch > irgendwie blind...:-) > > Besonders dritte Punkt ist interessant, scheint wohl an > der internen Speicherwaltung zu liegen, so nach dem Motto - > wenn Flash monotonere Arbeiten macht kommt es so richtig > in fahrt. > > netten Gruß, Holger > > > <code> > o = ASBroadcaster; > o.oldAddListener = o.addListener; > o.oldRemoveListener = o.removeListener; > o.oldBroadcastMessage = o.broadcastMessage; > // > o.initialize = function (pObj) { > pObj.oldAddListener = this.oldAddListener; > pObj.oldRemoveListener = this.oldRemoveListener; > pObj.oldBroadcastMessage = this.oldBroadcastMessage; > pObj.addListener = this.addListener; > pObj.removeListener = this.removeListener; > pObj.broadcastMessage = this.broadcastMessage; > pObj._listeners = new Array(); > pObj.__blnSending = false; > pObj.__arrObjectsToRemove = new Array(); > } > // > o.addListener = function (pObj) { > var tmp = this._blnSending; > this._blnSending = false; > this.oldAddListener(pObj); > this._blnSending = tmp; > } > // > o.removeListener = function (pObj) { > if (this._blnSending == false) > this.oldRemoveListener(pObj); > else > this._arrObjectsToRemove.push(pObj); > } > // > o.broadcastMessage = function () { > this.__blnSending = true; > this.oldBroadcastMessage.apply(this, arguments); > this.__blnSending = false; > var l = this.__arrObjectsToRemove.length; > for (var i = 0; i < l; i++) > this.oldRemoveListener(this._arrObjectsToRemove[i]); > this._arrObjectsToRemove.splice(0); > } > </code> > > ------------------------------------------------------ > Archiv : //www.freelists.org/archives/ascoders/ > Optionen : //www.freelists.org/list/ascoders > ------------------------------------------------------ > ------------------------------------------------------ Archiv : //www.freelists.org/archives/ascoders/ Optionen : //www.freelists.org/list/ascoders ------------------------------------------------------