我正在编写一些带有大量大型 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 有一些最大大小?
对我来说这看起来像是一句俏话......
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=[];