2

ここに、私のJavascriptコードのオブジェクトとグローバル名前空間があります。javascriptを使用してガベージコレクションを削除または使用しますか?

Users.Cache.data = { x:'1', y:'2', z:'3'};

私はデータ内のすべてのエントリをクリアしたい場合は、私は2つの方法があります:

1)Users.Cache.data = {}; //ガベージコレクションがメモリから削除するためにそれの世話をします。任意の特定のアプローチが優れている場合

2)for(i in Users.Cache.data){ delete(Users.Cache.data[i]; }

誰でもコメントすることができます基準としてこれらを考慮してください。 a)のメモリリーク(のように見えませんどちらもメモリリークの問題) b)の性能を有しています。

+0

心配する必要はありません。単に最初のオプションを実行します(ループする必要はありません)。ガーベッジコレクターはどちらかの方法で仕事をします。 – PeeHaa

+0

これを試してみてくださいhttp://perfectionkills.com/understanding-delete/#theoryこれhttp://docstore.mik.ua/orelly/webprog/jscript/ch11_03.htm –

答えて

4

実際にはdeleteを使用すると、まだガベージコレクションが使用されています。それは単にGCのためのより多くの作業を行います。

delete x.yを呼び出すとメモリが解放されません。それはちょうどのyへの参照をクリアします。
yに他の参照がない場合、それはルーティングされず、最終的なガベージコレクションに開放されます。

2番目のオプションでは、GCを通過させるためのルーティングされていない参照がさらに作成されます。
(実際に何も測定していないことに注意してください)

+1

ここでもう少し詳しくはhttp: /docstore.mik.ua/orelly/webprog/jscript/ch11_03.htm –

+0

セクション11.3.2を無視してください。 – SLaks

+0

あなたの回答に感謝します。 – sbr

関連する問題