Вопрос об утечках памяти Javascript для Windows Gadget (тоже в общем) - PullRequest
1 голос
/ 08 февраля 2011

Я некоторое время работал над утечками памяти для гаджета Windows 7, а затем получил больше возможностей для реализации, которые, как я считаю, сделали утечки памяти хуже / добавили больше утечек. Я запустил 4 экземпляра гаджета в течение примерно 16 часов, а использование памяти возросло с 22 000 до 36 000 000. Однако меня поразило то, что дескрипторы, объекты USER и объекты GDI остались примерно одинаковыми. Объекты USER и GDI фактически остались одинаковыми, и Handles за это время прыгнули с 1026 на 1034. Я считаю, что это просто эксцентричность боковой панели, поскольку каждый из моих гаджетов обновляется каждые 7 секунд.

У меня два вопроса, в общем случае, какие утечки памяти вызывают что-то вроде этого? И в моем случае я использую Ajax для доступа к веб-службам для этого гаджета, поэтому, если кто-нибудь знает, что может вызвать такую ​​вещь в Ajax, это было бы здорово.

Я уже видел статьи об основных причинах утечек памяти в Javascript, мне просто интересно, есть ли у кого-нибудь идеи о том, почему память так сильно возрастает, когда ручки и объекты остаются одинаковыми. Возможно, есть известные причины в Ajax или программировании в целом для такого случая?

Ответы [ 2 ]

0 голосов
/ 18 сентября 2011

В Windows 7 64bit SP1 появилась утечка памяти sidebar.exe, которая может быть затронута вами. Насколько я знаю, это еще не исправлено, однако этот блог предлагает обходной путь.

0 голосов
/ 08 февраля 2011

Я определенно ценю работу JS, выполняемую без библиотек, но в такой ситуации вы можете добавить JQuery (или Prototype, Mootols и т. Д.) В микс.Они очень хорошо протестированы на потребление памяти с помощью запросов Ajax (и манипуляций с DOM).

Сначала вам не нужно изменять код DOM, но попробуйте заменить запросы Ajax методами Ajax JQuery.Затем снова запустите тесты памяти.Если это устраняет это, вы знаете, что в вашем коде XHR есть ошибка памяти.

В противном случае, это, вероятно, связано с тем, что обработчики событий в вашем коде DOM не удаляются должным образом до того, как вы уничтожите элемент (я предполагаю, что вы удаляете и добавляете элементы DOM в какой-то момент).Если обработчик не удален в IE, это приведет к утечке памяти (элемент DOM хранится в памяти неограниченное время, сосать).

...