使用大型 JS ArrayBuffer 时内存使用率过高

问题描述 投票:0回答:1

我正在编写一些带有大量大型 ArrayBuffer 的浏览器代码。我注意到内存消耗出乎意料地大,但我不确定为什么会这样。我以前从未使用过 ArrayBuffers,也不太了解它。但我的测试代码很短,所以我将其包含在这里:

const data = new Uint8Array(
    await get_new_data(output_data_size)
);

async function get_new_data(output_data_size) {
    const output_byte_count = Math.ceil(1024*1024*output_data_size);
    let results_buffer = new ArrayBuffer(output_byte_count);
    return results_buffer;
}

它应该创建一个大小为output_data_size兆字节的ArrayBuffer,所有元素都初始化为零,仅此而已。当使用

output_data_size=128
运行代码时,它应该创建一个 128 MB 的 ArrayBuffer,但每次我尝试时,Web 浏览器内存消耗都会增加 5 GB。我看不出任何可能发生内存泄漏的明显地方。也许 ArrayBuffers 有一些最大大小?

javascript memory-management memory-leaks arraybuffer
1个回答
0
投票

对我来说这看起来像是一句俏话......

let Size=0; // some value


var data = new Uint8Array(new ArrayBuffer(Math.ceil(1048576*Size))); // NB: not a constant!


// And later when you're done with it give the garbage collector a hand:

data=[];
© www.soinside.com 2019 - 2024. All rights reserved.