2016-04-25 8 views
1

私はArrayBuffer(Uint8Arrayと言う)に格納したい大きなオブジェクトを持っています。注:オブジェクトの大きさはわかりません。JS:不明なサイズのArrayBuffer

バッファ内の値を設定するためのすべてのロジックが既に用意されています。 (例えば、new Uint8Array(100000000);を使用すると既に動作しています。)

問題は、バッファのサイズ変更が効率的かどうかわかりません。パフォーマンスはここでの主な取り組みです。

私はもっと先にnew Uint8Array(100);と言うことを考えていましたが、それ以上のサイズが必要な場合は、新しいサイズのものを作成してください。等々。

通常の配列を作成し、最後にUint8Arrayに変換するとどうなりますか?

+0

これらのアレイの数は、一度に何個必要ですか? – deamentiaemundi

+0

1.私は毎秒多くのものを作成しますが、一度に1つしか作成しません。 – RainingChain

答えて

0

一度に1つしか必要ではなく、多くの時間で多くの速度が必要な場合は、最初の配列を保持して上書きする必要があります。記述したように最初のものに必要な量のメモリを試してみてください(それほど遅くはありません)が、次のものの配列を保持してください(現在の長さを保つために何かが必要です)。あなたがもっと必要とするたびに、あなたは最初のものと同じように行動します。メモリが過度に大きくなると、メモリを随時「フリー」にしたいかもしれません。

これは貧しい人のmalloc() /ガベージコレクタです。はい、配列の必要性はと厳密にはです。

+0

しかし、それは小さなデータが大きな配列サイズを使用することを意味します。私はクライアントにデータを送信しているので、それを小さくする必要があります。 – RainingChain

+0

申し訳ありませんが、これらの特殊配列の 'realloc()'のようなものは、近い将来に*計画されています。あなたはそれを速く得るか、小さいかどちらかです。厳密にはバイナリではないので、ノブで少し弾くことができますが、ケーキを食べることはできません。また、あなたは確実ですか?それは、配列処理が最大のボトルネックであることを確実に知っているような適切なプロファイリングセッションを実行していますか?ああ、あなたがネット経由で送る場合、帯域幅はCPU時間よりもはるかに高価なので、 'UInt8Array'へのあなたのメソッド' Array'があなたにとって最適かもしれません。 – deamentiaemundi