执行打字稿数组分配内存的空指数



我正在尝试复制服务器端数据库的一部分,以在打字稿Web应用程序中处理。我需要在打字稿中通过其整数ID访问各种记录。我看到的一个问题是,这些索引可能不是连续的,也不是从0开始(实际上,如果删除了一部分数据库,则可能以高于零的值开始)。

给定以下代码:

let a: Array<number> = new Array<number>();
a[10] = 1;
a[11] = 2;

如果我在Chrome中检查A,我会看到:

(12) [empty × 10, 1, 2]

这使我相信我已经为12个值分配了内存,但是仅使用最后2个值。对于小启动索引来说,这没什么大不了的,但是如果我在数百万中有第一个索引,并且正在使用数组中的较大对象,它可能成为一个重要的内存问题。

我是否正确地假设即使为未使用的索引也分配了内存?如果是这样,什么可以使用允许非连接索引的更好的容器?

这取决于JavaScript运行时的实现,但总体而言,稀疏数组仅为实际使用的元素分配内存。

据我所知,例如,Chrome在内部将稀疏阵列作为词典存储,这就是为什么您也可能会在稀疏和完整阵列之间体验不同的性能特征。

最新更新