Утечка памяти в IE - установка таймаута, повторная установка innerHTML - PullRequest
1 голос
/ 15 августа 2011

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

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

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

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

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

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

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

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

1 Ответ

0 голосов
/ 02 августа 2012

Все опции, которые вы упомянули, стоят того, пытались ли вы также сначала добавить элемент 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

...