我正在使用XMLHttpRequest下载大小为750mb的文件作为arraybuffer。 问题在于,下载文件后,即使删除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>
1)这是删除XMLHttpRequest对象的正确方法吗? 2)如何使XMLHttpRequest将内存释放回os?
谢谢
答案 0 :(得分:0)
不完全是。 delete <variable name>
甚至看起来令人困惑(我很惊讶它可以正常运行而不会抛出错误)。 <variable> = null
通常是正确的方法。但是,在您的情况下,它不会有所作为。
JS实现了自己的memory management。一旦相关变量未被其他人使用,垃圾收集器将释放内存。
问题是Garabge Collector没有连续运行。而是不时地调用它。尝试在开发人员工具中单击“收集垃圾”按钮。这将立即调用GC。
这不是一种解决方案,而是一种调查内存是否可以释放的方法,或者由于从某个地方引用您的数据而无法释放内存的方法。
答案 1 :(得分:0)
我发现问题出在“ console.log()”。如果我在console.log行中注释掉,则内存将释放回操作系统。