我有一个大对象要存储在ArrayBuffer中(比如说Uint8Array)。注意:我不知道物体有多大。
我已经有了关于在缓冲区中设置值的所有逻辑。 (例如,如果使用new Uint8Array(100000000);
,它已经可以工作了。)
问题是我不知道是否有可能有效地调整缓冲区大小。性能是这里的主要任务。
我一直在考虑从说起new Uint8Array(100);
开始,如果我需要更多,我将创建一个大小为new Uint8Array(200);
两倍的新内容,然后将现有内容复制到新内容上(不确定如何)。等等。
只创建一个常规数组并将其最后转换为Uint8Array
怎么样?
最佳答案
如果一次只需要一个,但每次仍然需要多个,并且需要速度,则需要保留第一个数组并将其覆盖。您可以按照描述的方法计算出第一个内存所需的内存量(速度并不那么慢),但保留下一个内存的数组(您需要一些东西来保持当前长度)。每次您需要更多时,都可以像第一个一样进行。当内存太大时,您可能会不时地“释放”内存。
这是一个穷人的malloc()
/垃圾收集器,是的,它假定您对数组的需求严格连续。
关于javascript - JS:大小未知的ArrayBuffer,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/36831279/