2017-02-12 9 views
0

日付のローカライズのために次のコードを実行しています。しかし、それはあまりにも多くのメモリ(約2ギガバイト)を取っている。日付の会話が大量のメモリを使用しています

var options = { 
     year: 'numeric', month: 'short', day: 'numeric', 
     hour: 'numeric', minute : 'numeric', 
     second: 'numeric' ,timeZone : 'Asia/Calcutta', 
     timeZoneName: 'short',hour12 : false}; 
var _ts; 

// length approx 80k 
var _array = [1486901778700, 1486901778700, ....., 1386901778700.0 ] 
var final_string = '' 

for(var key in _array) { 
    //======>>this conversation taking too much memory (around ~2gb) <<====== 
    _ts_string = new Date(_debug_data.timestamp).toLocaleString('en-US', options) 
    final_string += _ts_string 
} 

そこで質問はここにある: -
- なぜそれがあまりにも多くのメモリを取っています?
- この日付の会話や最適化の方法は何ですか?
- メモリが多すぎると、コード実行後にメモリが解放されないのはなぜですか? (たとえ私が手動で "gc()"と呼んでもまだメモリが解放されませんでした)
- 私はコマンドライン(--max-old-space)でメモリー制限(ヒープサイズ)を制御しようとしました。
- メモリ上限を制御するためにupstart limitオプション(ハードとソフトの制限を提供)を試していますが、動作しませんでした。

私はノード0.12.8バージョンを使用しています。

助けが必要です。 :)

+2

ループの内容は 'key'や' _array'と何が関係していますか?また、 'for..in'は_Object_の反復処理のためのもので、_Array_を繰り返し処理することがわかっている場合は、通常の[' for'](https://developer.mozilla.org/ja/docs/Web/JavaScript/参照/ステートメント/ for)。 '_ts_string'はグローバルになっているようですね? –

+0

各繰り返しに対して新しいDateオブジェクトを作成する必要がありますか? –

+0

@PaulS。私はここに言及するのを忘れた。すでに定義されています。 –

答えて

1

ループ内に新しいものは必要ありません。各アイテムに対して新しいDateオブジェクトを作成しています。ループ内で、試してみてください。

final_string += Date(_debug_data.timestamp).toLocaleString('en-US', options); 

ます。また、不足しています「;」いくつかの行に。

+0

私は試してみましょう、結果と全体のnpmの書き込みを更新する ";"なし。それは問題ではない... :) –

+1

-1。 'new'を使わないで[' Date'](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date)を呼び出すと、非常に異なることが起こります。これは動作しません。 – Bergi

+0

@Bergiなぜ-1、関数として 'Date'を呼び出すのは文字列を返し、それがOPがしようとしているものです。 –

0

JavaScriptの文字列は可変ではないので、最初に文字列の配列を作成してから、最後に結合する方が高速/軽いでしょう。

var strings = []; 
for(var key in _array) { 
    strings.push(new Date(_debug_data.timestamp).toLocaleString('en-US', options)); 
} 

var final_string = strings.join(); 
console.log(strings.length); 

しかし、とにかく、80K日付オブジェクトは、&時、明らかにいくつかのリソースがかかります。

関連する問題