2009-09-21 35 views
2

我已經在使用IE Mobile的設備上編寫了脫機使用的應用程序(使用Google Gears)。這些設備正在經歷內存泄漏,使得設備隨着時間的推移變得不可用。如何防止IE Mobile中的內存泄漏?

問題頁面從本地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事件的每一個環節,以「空」重新繪製表之前但它似乎仍然泄漏。

有人有什麼想法嗎?

在它的事項的情況下,該功能是從每一個環節叫看起來是這樣的:

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

將構成以任何方式循環引用?

傑克

+0

回來?關閉瀏覽器完全釋放內存。當您重新打開它但不釋放內存時,執行「軟關閉」可提高性能。 該設備是一個XDA軌道2. – 2009-09-21 13:46:09

回答

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>"; 
+0

這是一個很好的提示,但你的例子仍然連接了很多字符串。 – rpetrich 2009-10-14 22:51:19

0

如果你是做了很多的腳本的改變頁面的內容也就是在一個古老的AJAX的書,我已經在過去使用中提到的IE內存泄漏(它可能很好在這裏擊中你)。當頁面卸載時,您需要清除已更改的所有div/span/etc,或者其內容將保留在內存中。嘗試像

<script type="text/javascript"> 
window.onunload = clearAJAXContent; 

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

我相信,清除時,你想設置innerHTML爲「」。當我回家後,我會盡力找到書,並更新我的答案,如果有什麼不同,但這應該給你的東西在此期間測試