あなたの質問を要約すると、できるだけIE6 GCのバグに悩まされたくありません。そのバグは、2つの原因があります。
- ガベージコレクションが1回発生するごとに非常に多くの配分。したがって、より多くの割り当てを行うと、oftener GCが実行されます。
- 「空中」になっているオブジェクトが増えるほど、ガベージコレクションの実行に多くの時間がかかります(ゴミとしてマークされているオブジェクトのリスト全体をクロールするため)。
1の原因となる解決策は、割り当ての数を減らすことです。可能な限り新しいオブジェクトと文字列を割り当てます。
2を引き起こす解決策は、「ライブ」オブジェクトの数を減らすことです。不要になったらすぐに文字列やオブジェクトを削除し、必要に応じて新しい文字列やオブジェクトを作成してください。
ある程度、これらの解決策は矛盾しています。つまり、メモリ内のオブジェクトの数を少なくすると、より多くの割り当てと割り当て解除が行われます。逆に、同じオブジェクトを常に再利用するということは、厳密に必要なものより多くのオブジェクトをメモリに保持することを意味する可能性があります。
ここでご質問ください。新しいオブジェクトを作成することでオブジェクトをリセットするか、すべてのプロパティを削除するかによって、オブジェクトは後で処理したいオブジェクトに依存します。
は、おそらくそこに新しいプロパティを割り当てることになるでしょう:
- あなたはそうすぐに、私は削除するか、最初にクリアする新しいプロパティ、すぐに割り当て、スキップすることをお勧めします場合。ただし、のすべてのプロパティが上書きまたは削除されていることを確認してください!)
- オブジェクトがすぐには使用されず、後で再投入される場合は、削除するか、後で新しいものを作成する。
JScriptオブジェクトを新しいオブジェクトであるかのように再利用するために、JScriptオブジェクトをクリアする方法はありません。つまり、あなたの質問への短い答えは「いいえ」です、つまりjthompsonが言うように。
"array.length == 0 ...は単一の「操作」です。つまり、一定の時間です。「私はそれを疑っています。 – Miles
私はそれがコンテンツを削除するとは思わない - ちょうどpush()のようなものが配列が空であるかのように動作させる。あなたは正反対のことを言及していますか? – levik
@derobert:それは少し予期しています。 IE6ガベージコレクションの問題は十分に文書化されています。 – levik