我在客户端中创建了巨大的Blob,用户可以将其下载为文件。

以下示例仅用于演示问题

var x= "sdfslkdfjklsdjiflskdflsdf" ; for(var i = 0; i<19;i++) x=x+x
var blob = new Blob([x,x,x,x,x,x,x,x,x,x,x,x,x], {
    type : "text/plain"
});

这将占用大量内存。当我用完 blob 后,我想释放该内存。
(我正在IE11 Edge中对此进行测试)

运行此脚本两次将失败,因为无法分配更多的内存

我已经尝试设置blob = null或使用delete blob,但内存没有任何 react 。

如何释放内存?

最佳答案

我想你会在这里碰壁。 Javascript是garbage-collected,这意味着您可以做的最好的事情就是“取消设置”变量,以在浏览器认为适当的时候有效地将其标记为垃圾回收。

看起来很吸引人,设置为null不会立即释放分配的内存,而只会删除引用-只有在实际发生垃圾收集时(只有在不存在对所涉及对象的其他引用的情况下),才可能稍后释放内存。 :

var blobA = new Blob(...);
var blobB = blobA;
blobA = null;
console.log(blobB); // Blob, the object still exists

垃圾回收是自动的,无法通过Javascript来预测或检测垃圾回收的时间。但是,有一种方法可以手动触发它:
window.location.reload();

没错,对整个页面进行完全重新加载将触发垃圾回收,这实际上是AFAIK唯一的方法。在设计应用程序时,您可能需要考虑这一点。

10-04 11:29
查看更多