まず、メモリ解放の例を見てみましょう。 <スクリプト言語="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 をインストールするための詳細な手順と問題解決方法
ファイル名が少ないファイルを表示ファイル名を少なく | grep -n コンテンツを検索内容に応じて...
目次1. Dockerファイル2. pom 構成3. イメージプッシュ4. k8s デプロイメント前...
目次1. 資源と建設1.1 クリエイターリソースファイルの基本1.2 リソースの構築2. アセットバ...
構造とパフォーマンスの紹介HTML 構造、CSS 表現、JavaScript 動作。Web ページの...
1. 要件の説明特定の要素については、背景background-imageを半透明にしたいが、テキス...
序文: 「MySQL 入門」シリーズの記事は終了しました。今後も引き続き MySQL に焦点を当て、...
目次序文時間型を保存するのに文字列を使用しないでくださいMySQL の日付型日時タイムスタンプTIM...
目次1. 実装2. 問題点3. より良い実装方法があるかどうか検討する要約する背景は日付のタイトルで...
この記事では、HTML描画ユーザー登録ページの具体的な実装コードを参考までに共有します。具体的な内容...
MySQL でテーブルスペースの断片化を解消する詳細な例断片化の原因(1)テーブルのストレージは断片...
トリガー:トリガーの使用シナリオと対応するバージョン:トリガーは次の MySQL バージョンで使用で...
スタイルシートCSS (カスケーディング スタイル シート) は、HTML Web ページを美しくす...
コンパイル後にAngularプロジェクトをNginxにデプロイする方法をオンラインで検索すると、ほと...
この記事では、参考までにMySQL 5.7.21のインストールチュートリアルを紹介します。具体的な内...
この記事では、例を使用して、MySQL ストアド プロシージャの原理と使用方法を説明します。ご参考ま...