Утечка памяти IE - settimeout, повторная установка innerHTML

У меня есть приложение, которое перерисовывает часть страницы каждые 60 секунд. Перерисовка вызывает серьезные утечки памяти в IE.

Я попытался использовать settimeout/setinterval для установки таймера перерисовки.

Я также пробовал многие советы, предложенные как

  • установка innerHTML = '' вместо использования jquery remove/empty.
  • Удаление всех обработчиков событий перед перерисовкой HTML.
  • Удаление всех дочерних узлов перед очисткой родительского контейнера.
  • Настройка внешнего HTML для очистки вместо внутреннего HTML

Несмотря на все это, я вижу большую утечку памяти. Статья MS KB указывает на то, что IE 8 по своей природе является утечкой, и нам необходимо применить исправление: http://support.microsoft.com/kb/975623

Но я видел эту проблему и в IE7, и в Firefox на очень небольшом уровне.

Любая помощь будет принята с благодарностью.

Спасибо, Сучин


person goin_crazy    schedule 15.08.2011    source источник
comment
Итак, вы знаете, что утечка все еще в IE9.   -  person Alex Nolasco    schedule 02.08.2012


Ответы (1)


Все параметры, которые вы упомянули, стоят того, чтобы попробовать, вы также пытались сначала добавить элемент DOM, а затем установить innerHTML позже?

Вот пример: http://ecmascript.stchur.com/blogcode/ie_innerhtml_memleak/noleak.html

И решение парня

   // Add the element to the DOM first, and /then/ set .innerHTML to 
   // prevent memory from leaking.
   document.body.appendChild(elem);
   elem.innerHTML = str;

Как вы удалили все обработчики? Вы использовали что-то вроде очищающего раствора Крокфорда? http://javascript.crockford.com/memory/leak.html

person Alex Nolasco    schedule 02.08.2012