2009-09-21 2 views
2

Я написал приложение для использования в автономном режиме (с Google Gears) на устройствах с использованием IE Mobile. Устройства испытывают утечки памяти с такой скоростью, что устройство становится непригодным с течением времени.Как предотвратить утечку памяти в IE Mobile?

Страница проблемы извлекает записи из локальной базы данных Gears и отображает таблицу каждой записи со ссылкой в ​​последнем столбце каждой строки, чтобы открыть запись (ссылка имеет только onclick = "open ('myID") "). Когда они сделали с записью, они возвращаются к таблице, которая отображается RE. Это повторное построение этой таблицы, похоже, является проблемой. Главным образом события 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. –

ответ

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

0

Если вы делаете много сценариев, который изменяет содержание страницы есть утечка памяти IE, который был упомянут в старой AJAX книге, которую я использовал в прошлом (и это вполне может ударьте здесь). Когда выгружаете страницу, вам необходимо очистить все изменения div/spans/etc, которые вы изменили, или их содержимое останется в памяти. Попробуйте что-нибудь вроде

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

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

Я считаю, что при очистке вы хотите установить innerHTML в "". Когда я вернусь домой, я постараюсь найти книгу и обновить свой ответ, если есть что-то другое, но это должно дать вам что-то, чтобы испытать в то же время

 Смежные вопросы

  • Нет связанных вопросов^_^