如何在javascript中释放XMLHttpRequest的内存?

如何在javascript中释放XMLHttpRequest的内存?,javascript,html,performance,javascript-objects,Javascript,Html,Performance,Javascript Objects,我正在使用XMLHttpRequest作为arraybuffer下载大小为750mb的文件。 问题是,下载文件后,即使删除XMLHttpRequest对象,内存也不会释放到操作系统。 我的示例代码是 <!DOCTYPE html> <html> <body> <div id="demo"> <button type="button" onclick="loadXMLDoc()">load the file</button>

我正在使用XMLHttpRequest作为arraybuffer下载大小为750mb的文件。 问题是,下载文件后,即使删除XMLHttpRequest对象,内存也不会释放到操作系统。 我的示例代码是

<!DOCTYPE html>
<html>
<body>

<div id="demo">
<button type="button" onclick="loadXMLDoc()">load the file</button>
<button type="button" onclick="clear()">clear</button>
</div>

<script>
var xhttp = null;
function loadXMLDoc() {
    if(xhttp == null)
        xhttp = new XMLHttpRequest();
    xhttp.onreadystatechange = function() {
    if (this.readyState == 4 && this.status == 200) {
      console.log(xhttp.response);
      delete xhttp;
      xhttp = null;

    }
  };
    xhttp.open("GET", "http://192.168.1.104/gltf/bmw/buffer.bin", true); //buffer.bin is 750 mb

    xhttp.setRequestHeader('Content-Type', 'application/json;charset=UTF-8');
    xhttp.responseType = 'arraybuffer';
    xhttp.send();
}

function clear()
{
    delete xhttp;
    xhttp = null;


}

</script>

</body>
</html>

加载文件
清楚的
var xhttp=null;
函数loadXMLDoc(){
if(xhttp==null)
xhttp=newXMLHttpRequest();
xhttp.onreadystatechange=函数(){
if(this.readyState==4&&this.status==200){
console.log(xhttp.response);
删除xhttp;
xhttp=null;
}
};
xhttp.open(“GET”http://192.168.1.104/gltf/bmw/buffer.bin“,true);//buffer.bin是750 mb
setRequestHeader('Content-Type','application/json;charset=UTF-8');
xhttp.responseType='arraybuffer';
xhttp.send();
}
函数clear()
{
删除xhttp;
xhttp=null;
}
1) 这是删除XMLHttpRequest对象的正确方法吗? 2) 如何使XMLHttpRequest将内存释放回操作系统?


谢谢,不完全是
delete
甚至看起来很混乱(我很惊讶它能正常工作而不抛出错误)
=null
通常是正确的方法。但在你的情况下,这不应该有什么区别

JS实现自己的。一旦其他任何人不使用相关变量,垃圾收集器将释放内存

问题是Garabge收集器没有持续运行。而是时不时地打电话。尝试单击开发人员工具中的“收集垃圾”按钮。这将立即调用GC。


这不是一个解决方案,而是一种调查内存是否可以释放或无法释放的方法,因为从某处引用了您的数据。

我发现问题在于“console.log()”。如果我注释掉console.log行,那么内存将释放回操作系统。

感谢您的回复。在开发者工具中点击“收集垃圾”按钮并没有解决这个问题。仍然没有释放内存。如果我使用xhttp.responseType='blob';然后就没有内存尖峰了。我不确定这一点,但将xmlhttprequest的代码放在一个闭包函数中,然后重试。其次,在这里签出答案,即对呼叫进行版本控制:@Srinivas,我试图找出“arraybuffer”是否有什么特别之处,但没有找到任何相关内容:(