Я обнаружил некоторые утечки памяти в файле Javascript, с которым работал, и обнаружил одного из последних виновников пересоединения.Когда я получаю responseXML из XMLHttpRequest, я не думаю, что ответ когда-либо будет удален.Я не знаю, как удалить его, я попытался удалить дочерние узлы, а затем установить его на ноль (надежная сборка мусора будет работать), и я также попытался использовать ключевое слово delete.Ничто из этого не помогло.Ниже приведен фрагмент кода, который нарушает работу (я пропустил некоторые тайм-ауты, которые удаляют сам запрос, но это не является причиной утечки памяти).
var request = new XMLHttpRequest();
request.open("GET", url, true);
request.onreadystatechange = onReadyStateChange1;
request.send();
}
function onReadyStateChange1()
{
if (4 == request.readyState)
{
if (request.status == 200)
{
request.responseXML; //It leaks even if I just do this.
//me.ParseData(request.responseXML);
me.disconnected = 0;
} else
{
me.disconnected += 1;
}
request.onreadystatechange = noop; //noop is an empty function
request = null;
me = null;
}
}
Как вы можете видеть в коде, я недаже не вызывая ParseData, я просто положил request.responseXML;
, и он все еще протекаетЕсли я прокомментирую и эту строку, утечка исчезла.Это означает, что утечка не в функции ParseData или где-либо еще, это - responseXML.Я считаю, что это связано с древовидной структурой responseXML, дерево DOM, вероятно, не очищается должным образом.Если бы кто-нибудь мог мне помочь, это было бы здорово.