Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/451.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Firefox强制gc在文件上传后清理文件链接,以减少内存消耗_Javascript_Firefox_File Upload_Memory Leaks_Garbage Collection - Fatal编程技术网

Javascript Firefox强制gc在文件上传后清理文件链接,以减少内存消耗

Javascript Firefox强制gc在文件上传后清理文件链接,以减少内存消耗,javascript,firefox,file-upload,memory-leaks,garbage-collection,Javascript,Firefox,File Upload,Memory Leaks,Garbage Collection,我正在开发javascript文件上传程序。当上传完成后,我发现firefox profiler中有很多文件链接(关于:内存)。 问题是-如何清理此文件链接并强制GC? 我使用dataUri(url.createobjecturl)创建预览和FormData来上传文件。 有一个内存报告的例子 651.04 MB (100.0%) -- explicit ├──430.49 MB (66.12%) -- dom │ ├──428.99 MB (65.89%) -- memory-file-dat

我正在开发javascript文件上传程序。当上传完成后,我发现firefox profiler中有很多文件链接(关于:内存)。 问题是-如何清理此文件链接并强制GC? 我使用dataUri(url.createobjecturl)创建预览和FormData来上传文件。 有一个内存报告的例子

651.04 MB (100.0%) -- explicit
├──430.49 MB (66.12%) -- dom
│  ├──428.99 MB (65.89%) -- memory-file-data
│  │  ├──428.93 MB (65.88%) -- large
│  │  │  ├────4.00 MB (00.61%) ── file(length=2111596, sha1=b95ccd8d05cb3e7a4038ec5db1a96d206639b740)
│  │  │  ├────4.00 MB (00.61%) ── file(length=2126739, sha1=15edd5bb2a17675ae3f314538b2ec16f647e75d7)
│  │  │  ├────4.00 MB (00.61%) ── file(length=2138438, sha1=2784adb8078f24f4a144c65ce13643355a4146a8)
│  │  │  ├────4.00 MB (00.61%) ── file(length=2176403, sha1=77958bb26563354cd611eaf7fd1308504fe13bd7)
│  │  │  ├────4.00 MB (00.61%) ── file(length=2179450, sha1=728abac0e79a6c9507d79fd3863f59985e7a48f7)
│  │  │  ├────4.00 MB (00.61%) ── file(length=2190489, sha1=35adc1cb98d2fe48fca1a82965deb7f5fd48474b)
│  │  │  ├────4.00 MB (00.61%) ── file(length=2292088, sha1=e6be87fbd4197f0b64226a842c4495ba5a18d217)
│  │  │  ├────4.00 MB (00.61%) ── file(length=2311952, sha1=85fcdde9920606af6d26af603931d0afc66713fe)
│  │  │  ├────4.00 MB (00.61%) ── file(length=2434576, sha1=f3233a8e88ef9fe5cd1514516795fa41b65056b2)
│  │  │  ├────4.00 MB (00.61%) ── file(length=2595794, sha1=b4b808f3e57a7924e0809009b70b11aa8b9ad608)
│  │  │  ├────2.00 MB (00.31%) ── file(length=1048805, sha1=20423b8519750a48b7b77f40a45e084aaba3e2f3)
│  │  │  ├────2.00 MB (00.31%) ── file(length=1054953, sha1=637b55f0c78022634f11204adbd75c0fae5e92ae)
好的,这对我来说是有效的,我清理了数组和对象,文件是:arr[i]=null和obj.file=null
上传后,我将不再使用此对象,arr=null和obj=null,不要从内存中删除文件

不确定强制GC收集未使用的对象是否有助于您的情况。根据内存日志,在每次迭代之后,文件对象的数量似乎在增加。换句话说,问题在于这些对象会泄漏,而不是GC太慢

为确保情况属实,只需在脚本停止时(例如,在上载过程完成后)检查内存消耗。如果文件对象的数量最终减少,则意味着GC将考虑删除这些对象。如果不是,应用程序无论如何都会保存对象

最近,我遇到了一个与Blob类似的问题——我在循环中创建了对象,并添加了一个Blob作为其属性。关于内存,我有一张类似的图片——与迭代次数相关的文件条目的数量。当我显式地将Blob属性设置为null时,这些对象从大约:内存中消失

因此,我的建议是查看代码,找到所有将blob作为属性(我怀疑是数组项)保存的位置,并在确定不再需要它们时将它们设置为null

希望这有帮助