2017-11-21 6 views
0

私は、typescript Webアプリケーションでの処理のために、サーバーサイドデータベースの一部を複製しようとしています。私は、typescript内の整数IDでさまざまなレコードにアクセスする必要があります。私が見る1つの問題は、インデックスが連続していなくても0で始まらないことです(実際には、データベースの一部が削除された場合、ゼロよりもはるかに高い値から開始する可能性があります)。Typescript配列は空のインデックスにメモリを割り当てますか?

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

私はChromeで検査した場合、私は以下を参照してください:

私は12個の値にメモリを割り当てられているが、唯一使っていると信じて私をリード
(12) [empty × 10, 1, 2] 

次のコードを考える

最後の2です。これは小さな開始インデックスでは大したことではありませんが、私が何百万という最初のインデックスを持っていて、配列内のより大きなオブジェクトを使用していると、大きなメモリ問題になる可能性があります。

未使用のインデックスでもメモリが割り当てられていると仮定して正しいですか?もしそうなら、非連続インデックスを可能にするより良いコンテナは何でしょうか?

答えて

1

これはJavaScriptランタイムの実装に依存しますが、一般にスパース配列は実際に使用されている要素にのみメモリを割り当てます。

私の知る限り、Chromeは例として内部的に辞書として疎配列を格納しています。そのため、疎配列と完全配列のパフォーマンス特性が異なることがあります。

関連する問題