如何防止IE Mobile中的内存泄漏?

时间:2009-09-21 12:55:30

标签: memory mobile internet-explorer memory-leaks gears

我已经在使用IE Mobile的设备上编写了一个脱机使用应用程序(使用Google Gears)。这些设备正在经历内存泄漏,其速度使设备随着时间的推移变得无法使用。

问题页面从本地Gears数据库中获取条目,并在每行的最后一列中使用链接呈现每个条目的表以打开条目(链接只是onclick =“open('myID')”) 。当他们完成条目后,他们返回到表格,这是重新渲染的。这个表的重复构建似乎是问题所在。主要是onclick事件。

该表基本上是这样生成的:

var tmp="";
for (var i=0; i<100; i++){
 tmp+="<tr><td>row "+i+"</td><td><a href=\"#\" id=\"LINK-"+i+"\""+
  " onclick=\"afunction();return false;\">link</a></td></tr>";
}

document.getElementById('view').innerHTML = "<table>"+tmp+"</table>";

我已经了解了内存泄漏的常见原因,并尝试在重新呈现表之前将每个链接的onclick事件设置为“null”,但它似乎仍然泄漏。

有人有任何想法吗?

如果重要,从每个链接调用的函数如下所示:

function afunction(){
 document.getElementById('view').style.display="none";
}

这会以任何方式构成循环引用吗?

杰克

2 个答案:

答案 0 :(得分:0)

我不知道它是否对内存有帮助,但是你可以将它们连接到数组并加入它们以获得更好的性能,而不是连接你的字符串。类似的东西:

var tmp=[];
for (var i=0; i<100; i++){
 tmp.push("<tr><td>row "+i+"</td><td><a href=\"#\" id=\"LINK-"+i+"\""+
  " onclick=\"afunction();return false;\">link</a></td></tr>");
}

document.getElementById('view').innerHTML = "<table>"+tmp.join('')+"</table>";

答案 1 :(得分:0)

如果你正在做很多改变页面内容的脚本,那么过去曾经使用的旧AJAX书中提到了一个IE内存泄漏(很可能会在这里发布)。当页面卸载时,您需要清除已更改的任何div / span / etc,否则它们的内容将保留在内存中。尝试像

这样的东西
<script type="text/javascript">
window.onunload = clearAJAXContent;

function clearAJAXContent() {
/* clear any dynamic content placeholders here*/
}
</script>

我相信,清除时,您需要将innerHTML设置为“”。当我回到家时,我会尝试找到这本书并更新我的答案,如果有什么不同,但那应该给你一些东西进行测试