我的代码是这样的:
/*
*初始化和更新地图上的er图片
*/
function initMarkers() {
var er;
var size = new OpenLayers.Size(21, 25);
var offset = new OpenLayers.Pixel(-(size.w / 2), -size.h);
var callBack;
//从后台读取er的坐标信息,还有一个状态信息,根据状态信息来更改图标
callBack = $.ajax({ url: "../Ajax/MapHandler.ashx?map=" + escape(mapPath) + "&action=QueryData", contentType: "application/x-www-form-urlencoded; charset=gb2312", async: false }); var lightsState;
if (callBack.responseText != "") {
var parameters = callBack.responseText.split("$$");
lightsState = parameters[0];
} //初始化交通灯
if (lightsState != "" && ers.ers.length == 0) {
parameters = lightsState.split("|%");
for (i = 0; i < parameters.length; i++) {
var lights = parameters[i].split("@&");
var lightState = lights[2]; //信号灯实时状态
var icon;
switch (lightState) {
case "1":
icon = new OpenLayers.Icon('../Maps/er-green.png', size, offset);
break;
case "2":
icon = new OpenLayers.Icon("../Maps/er-red.png", size, offset);
break;
case "3":
icon = new OpenLayers.Icon("../Maps/Trafficlight-yellow.png", size, offset);
break;
default:
icon = new OpenLayers.Icon('../Maps/er-green.png', size, offset);
break; }
er = new OpenLayers.Marker(new OpenLayers.LonLat(lights[0], lights[1]), icon);
ers.addMarker(er);
icon = null;
}
lightsState = null;
er = null;
}
else if (lightsState != "" && ers.ers.length != 0) {
parameters = lightsState.split("|%");
for (i = 0; i < parameters.length; i++) {
var lights = parameters[i].split("@&");
var lightState = lights[2]; //信号灯实时状态
switch (lightState) {
case "1":
ers.ers[i].icon.setUrl('../Maps/er-green.png');
break;
case "2":
ers.ers[i].icon.setUrl('../Maps/er-red.png');
break;
case "3":
ers.ers[i].icon.setUrl('../Maps/Trafficlight-yellow.png');
break;
default:
break;
}
}
}
}
现在问题是我需要每隔2s调用这个函数来刷新地图上标记的图标,我发现刷新以后IE占用的内存在不停得增长,请问高手,能否告诉我我的代码那里有问题吗?我该怎么解决这个问题?
/*
*初始化和更新地图上的er图片
*/
function initMarkers() {
var er;
var size = new OpenLayers.Size(21, 25);
var offset = new OpenLayers.Pixel(-(size.w / 2), -size.h);
var callBack;
//从后台读取er的坐标信息,还有一个状态信息,根据状态信息来更改图标
callBack = $.ajax({ url: "../Ajax/MapHandler.ashx?map=" + escape(mapPath) + "&action=QueryData", contentType: "application/x-www-form-urlencoded; charset=gb2312", async: false }); var lightsState;
if (callBack.responseText != "") {
var parameters = callBack.responseText.split("$$");
lightsState = parameters[0];
} //初始化交通灯
if (lightsState != "" && ers.ers.length == 0) {
parameters = lightsState.split("|%");
for (i = 0; i < parameters.length; i++) {
var lights = parameters[i].split("@&");
var lightState = lights[2]; //信号灯实时状态
var icon;
switch (lightState) {
case "1":
icon = new OpenLayers.Icon('../Maps/er-green.png', size, offset);
break;
case "2":
icon = new OpenLayers.Icon("../Maps/er-red.png", size, offset);
break;
case "3":
icon = new OpenLayers.Icon("../Maps/Trafficlight-yellow.png", size, offset);
break;
default:
icon = new OpenLayers.Icon('../Maps/er-green.png', size, offset);
break; }
er = new OpenLayers.Marker(new OpenLayers.LonLat(lights[0], lights[1]), icon);
ers.addMarker(er);
icon = null;
}
lightsState = null;
er = null;
}
else if (lightsState != "" && ers.ers.length != 0) {
parameters = lightsState.split("|%");
for (i = 0; i < parameters.length; i++) {
var lights = parameters[i].split("@&");
var lightState = lights[2]; //信号灯实时状态
switch (lightState) {
case "1":
ers.ers[i].icon.setUrl('../Maps/er-green.png');
break;
case "2":
ers.ers[i].icon.setUrl('../Maps/er-red.png');
break;
case "3":
ers.ers[i].icon.setUrl('../Maps/Trafficlight-yellow.png');
break;
default:
break;
}
}
}
}
现在问题是我需要每隔2s调用这个函数来刷新地图上标记的图标,我发现刷新以后IE占用的内存在不停得增长,请问高手,能否告诉我我的代码那里有问题吗?我该怎么解决这个问题?
我也测试了下,发现IE9以下,这个问题很明显。