gpt4 book ai didi

Javascript响应XML内存泄漏

转载 作者:行者123 更新时间:2023-11-28 02:46:35 25 4
gpt4 key购买 nike

我一直在追踪我一直在使用的 Javascript 文件中的一些内存泄漏,并且我找到了最后的罪魁祸首之一。当我从 XMLHttpRequest 获取responseXML 时,我认为响应不会被删除。我不知道如何删除它,我尝试删除子节点,然后将其设置为空(希望垃圾收集能够工作),我还尝试使用删除关键字。这些事情似乎都没有帮助。下面是一些有问题的代码(我省略了一些删除请求本身的超时内容,但这并不是导致内存泄漏的原因)。

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树可能没有被正确清理。如果有人能帮助我那就太好了。

最佳答案

IE返回的responseXML实际上是MSXML DOM而不是MSHTML DOM,这样开发者就可以使用selectNodes和selectSingleNode函数。 MSXML DOM 有它自己的garbage collection mechanism ,这样在 DOM 超出范围后您就不会注意到内存释放。因此,我想说这可能不是真正的内存泄漏,而是无延迟。

关于Javascript响应XML内存泄漏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4831966/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com