[OpenLayers-Users] Markers' events memory leak?

Donal donal_regan10 at YAHOO.CO.UK
Thu Feb 15 04:11:19 EST 2007


Hello,

I have a GeoRSS layer which displays a number of icons equal to the value of
a select box e.g. 10,25,50,100.
When the select box changes value, the GeoRSS layer is destroyed and a new
layer is displayed with the new number of icons. I notice in IE 6 that the
memory used steadily increases as I repeatedly change (up and down)  the
value in the select box.

I see that when a marker is initialized,  BROWSER_EVENTS are attached to the
marker's element (this.icon.imageDiv)  with a call to
OpenLayers.Event.observe(element,eventType,this.handleBrowserEvent.bindAsEventListener(this));
in Events.js attachToElement() function.

If I comment out the call to attachToElement, the memory used stays fairly
constant as I change the select box value (but obviously my markers have no
events associated with them which isn't much use). This suggests to me that
events not being detached/removed properly are the cause of the leak.

So I want to try something like 

OpenLayers.Event.stopObserving(this.icon.imageDiv, "mouseover", observer);

for each of the BROWSER_EVENTS as the markers are destroyed but I am not
sure what I should put as the value for observer.

I have tried 

adding the following propeties to the Events object

this.obs_handles = new Object();
this.obs_handles[element] = new Array();

and then in attachToElement doing

this.obs_handles[element][eventType] =
this.handleBrowserEvent.bindAsEventListener(this);
OpenLayers.Event.observe(element, eventType,
this.obs_handles[element][eventType]);

and then in Markers.destroy() adding
	
OpenLayers.Event.stopObserving(this.icon.imageDiv,"mouseover",this.events.obs_handles[this.icon.imageDiv]["mouseover"]);
OpenLayers.Event.stopObserving(this.icon.imageDiv,"mouseout",this.events.obs_handles[this.icon.imageDiv]["mouseout"]);
OpenLayers.Event.stopObserving(this.icon.imageDiv,"mousedown",this.events.obs_handles[this.icon.imageDiv]["mousedown"]);
etc;

this.events.obs_handles[this.icon.imageDiv] = null;
this.events.obs_handles = null;

but this has no effect.

Am I barking up the wrong tree? Any help/advice will be gratefully received.

Thanks,

Donal

-- 
View this message in context: http://www.nabble.com/Markers%27-events-memory-leak--tf3232599.html#a8981980
Sent from the OpenLayers Users mailing list archive at Nabble.com.




More information about the Users mailing list