2009-08-26 15 views
4

ウィンドウでは、アプリケーションが最小化されると、OSはアプリケーションに関連付けられたメモリをページファイル内に配置して解放します。他のガベージコレクションも実行される可能性があります。IEメモリ管理とJavaScriptによる面白い観察

私のjavascriptアプリケーションを実行しているInternet Explorerの場合、メモリ使用量が60MBから始まる場合、ブラウザを最小化するとメモリが17MBに減少します。それを最大化すると最大40MBに戻ります。

ゲイン20mb。

私のアプリケーションではJavaScriptが大量に使用されており、IEはもう参照されていないオブジェクトのガーベージコレクションを強制していると思われます。 JavaScriptで

経由(IEのみ)を使用すると、ガベージコレクションを強制することができます:私は(画面を最小化せずに)、このメソッドを呼び出した場合

CollectGarbage() 

だから、私は唯一のMEGまたは2

た場合を取り戻します私は、イベントキューを経由して、これを呼び出す:

setTimeout(CollectGarbage, 1000) 

私は約3メガ

マイアプリを取り戻します1日中実行できるように設計されているので、メモリ管理は非常に重要です。

誰かがIEを強制的にメモリを手動でミニスイズと同じ程度までクリーンアップする方法はありますか?

ブラウザでプログラムを最小限に抑えることをおすすめします。

乾杯:)

+0

あなたのアプリは、偶然、特定のライブラリやフレームワークを使用していますか? –

答えて

1

はあなたのメモリを節約する、変数/プロパティを未定義するdeleteキーワードを使用します。 More here

しかし、オブジェクトプロパティへの参照を失うだけであれば、それをnullに設定し、次のコレクションを待つだけです。

クロージャーとラムダ関数は、伝統的にメモリー・ホッグとリークの原因であったので、注意してください。 Understanding and Solving Internet Explorer Leak Patternsを参照してください。

+1

deleteは、プロトタイプからプロパティを削除し、結果として参照を削除します。 obj.prop = nullは参照を削除するだけです。 したがって、objsプロパティを繰り返し処理する場合は、削除の場合、プロパティの数が減少することがわかります。 obj.prop = nullの場合、プロパティの数は同じままです。 これらのアプローチの違いは、メモリの観点からは重要ではありませんが、意味的にかなり異なります。 – iasksillyquestions

+0

あなたの答えに明示的にリンクしているMozillaの医師は、「削除」はメモリを解放することとは何の関係もないと言います... –

+1

ちょっと@MikeYoung、7年後の対立コメントに感謝します。私はいいと思うし、とにかく根拠を説明します。はい、私は知っている 'delete'それ自身のメモリを解放しません。私はガベージコレクションがどのようなもので、どのように動作するかを知っています。私はそれが7年前のことを知っていたと言うことさえあります。このガベージコレクションは私が後にしているものです。 'obj ['foo'] = expensiveObj'がある場合、' 'foo''を削除すると参照が削除されます。それが唯一のリファレンスだと仮定して、次の掃引の間にこのメモリが解放されるようにするために最善を尽くしました。 – geowa4