まず、メモリ解放の例を見てみましょう。 <スクリプト言語="JavaScript"> <!-- strTest = "1"; ( var i = 0; i < 25; i ++ ) の場合 { strTest += strTest; } アラート(strTest); strTest を削除します。 ゴミを収集します(); //--> </スクリプト> CollectGarbage は IE の固有のプロパティで、メモリを解放するために使用されます。変数または参照オブジェクトを null に設定するか削除してから解放するために使用します。CollectGarbage を実行する前に、次の 2 つの条件が満たされている必要があります。 - オブジェクトは、それが存在するコンテキスト外では無効になります。 //-------------------------------------------------------- // JavaScript オブジェクトが無効になるのはいつか //-------------------------------------------------------- 関数testObject() { var _obj1 = 新しいオブジェクト(); } 関数testObject2() { var _obj2 = 新しいオブジェクト(); _obj2 を返します。 } // 例1 テストオブジェクト(); // 例 2 テストオブジェクト2() // 例3 var obj3 = testObject2(); obj3 = null; // 例4 var obj4 = testObject2(); var arr = [obj4]; obj3 = null; arrr = []; 次の 4 つの例では、 - 「例1」では関数testObject()内で_obj1を構築しますが、関数が終了すると、 - 「例 2」では、オブジェクト _obj2 も構築され、testObject2() に渡されるため、オブジェクトには「関数の外部」のコンテキスト環境 (およびライフ サイクル) があります。ただし、関数の戻り値は他の変数によって「保持」されないため、_obj2 はすぐに無効になります。 - 「例 3」では、testObject2() によって構築された _obj2 が外部変数 obj3 によって使用されます。 - 例 3 と同じ理由で、例 4 の _obj2 は "arr = []" の行以降は無効になります。 ただし、オブジェクトの「無効化」は、それが「解放」されることを意味するものではありません。 JavaScript ランタイム内では、オブジェクトがいつ解放されるかをユーザーに正確に伝える方法はありません。これはJavaScriptに依存しています 前述の Excel 操作サンプル コードでは、オブジェクトの所有者、つまりプロセス「EXCEL.EXE」は、「ActiveX オブジェクト インスタンスが解放された」後にのみ実行できます。ファイル ロックとオペレーティング システムのアクセス許可資格情報は、プロセスに関連しています。したがって、オブジェクトが「解放」されるのではなく「無効化」されるだけの場合、 ——これは JavaScript または COM メカニズムのバグだと言う人もいます。実は違います。これは OS と IE です。 Microsoft は、この問題を解決するための戦略として、メモリのリサイクル プロセスを積極的に呼び出すことを公開しました。 (Microsoft の) JScript では、CollectGarbage() プロシージャ (通常は GC プロシージャと呼ばれます) が提供されています。 上記の例で GC プロセスを呼び出すコードは次のとおりです。 //-------------------------------------------------------- // ActiveX オブジェクトを処理する場合、GC プロセスの標準呼び出し方法 //---------------------------------------------------------------------- 関数writeXLS() { //(わずかに...) excel.Quit(); エクセル = null; タイムアウトを設定します(ガベージ収集、1); } コードの最初の行は excel.Quit() メソッドを呼び出して、Excel プロセスを終了し、終了します。 2 行目のコードでは、Excel を null にしてオブジェクト参照をクリアし、オブジェクトを「無効」にします。ただし、オブジェクトはまだ関数コンテキスト内にあるため、GC プロセスが直接呼び出されると、オブジェクトはクリーンアップされません。 3 行目のコードでは、setTimeout() を使用して CollectGarbage 関数を呼び出し、時間間隔を '1' に設定して、writeXLS() 関数の実行後にのみ GC プロセスが発生するようにします。このようにして、Excelオブジェクトは「 ActiveX オブジェクトを使用する JS 環境では、GC プロセスの使用が非常に効果的です。潜在的なActiveX 実際、GC プロセスを使用しても、上記の Excel の問題は完全に解決されません。 IE も権限資格情報をキャッシュするためです。ページの資格情報を更新する唯一の方法は、「新しいページに切り替える」ことです。 //-------------------------------------------------------- //ActiveX オブジェクトの処理時に使用するページ切り替えコード//---------------------------------------------------------------------- 関数writeXLS() { //(わずかに...) excel.Quit(); エクセル = null; // 次のコードは、MSDN で提供されているメソッドを使用して Excel を呼び出し、IE のバグを解決するために使用されます。 // SetTimeout(CollectGarbage, 1); // Web ページの信頼された状態はクリア (または同期) できないため、SaveAs() などのメソッドは次回呼び出されたときに無効になります。 場所を再読み込みします。 } 削除演算子についてはマニュアルに記載されています 参考文献 オブジェクトからプロパティを削除するか、配列から要素を削除します。 式を削除 式パラメータは有効な JScript 式であり、通常はプロパティ名または配列要素です。 例示する 式の結果がオブジェクトであり、式で指定された属性が存在し、オブジェクトが削除を許可していない場合は、false が返されます。 それ以外の場合は true を返します。 最後に、GC に関する補足事項: IE ウィンドウが最小化されると、IE は CollectGarbage() 関数を 1 回アクティブに呼び出します。これにより、IE ウィンドウが最小化された後のメモリ使用量が大幅に改善されます。 JavaScript CollectGarbage 関数の詳細なケースに関するこの記事はこれで終わりです。より関連性の高い js CollectGarbage 関数の内容については、123WORDPRESS.COM の以前の記事を検索するか、以下の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM を応援していただければ幸いです。 以下もご興味があるかもしれません:
|
<<: Linux システム MySQL8.0.19 クイックインストールと構成チュートリアル図
>>: Linux に MySQL 8.0.19 をインストールするための詳細な手順と問題解決方法
ffmpeg は非常に強力なオーディオおよびビデオ処理ツールです。公式 Web サイトは http:...
letter-spacing プロパティ: 文字間のスペース (文字間隔) を増減します。このプロ...
入力ボックスへのユーザー入力、ウィンドウのサイズ変更、スクロール、Intersection Obse...
a.htmとb.htmの2つのファイルがあります。同じディレクトリ内のa.htmの内容は次のとおりで...
イベントの説明onactivate: オブジェクトがアクティブ要素として設定されたときに発生します。...
インストール必要な書類は下部に記載されていますステップ1 mysql-installer-web-c...
[LeetCode] 177. 最も高い給与従業員テーブルからn番目に高い給与を取得する SQL ...
MySQL はネストされたトランザクションをサポートしていますが、それを実行する人は多くありません....
コードをコピーコードは次のとおりです。 <本文> //マーキーの助けを借りて<MA...
目次序文1. 問題の原因2. 解決策VueはelementUIテーブルtr thの高さと背景色を変更...
この記事では、カレンダー効果を実現するためのBootstrap+Jqueryの具体的なコードを参考ま...
1. MySQLをインストールします。対応するソフトウェアをインストールするには、次の 3 つのコマ...
現在、Docker には中国向けの公式ミラーがあります。詳細については、https://www.do...
この記事では、ネイティブ JS で実装された共有サイドバーを紹介します。効果は次のとおりです。 以下...
解決親要素に position:relative を追加します。子要素に position:abso...