まず、メモリ解放の例を見てみましょう。 <スクリプト言語="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 をインストールするための詳細な手順と問題解決方法
まず、公式ウェブサイト http://dev.mysql.com/downloads/mysql/ ...
目次Vue2 レスポンシブ原則のレビューVue3 レスポンシブ原則の分析ネストされたオブジェクトの応...
1. mysql/mysql-server:latestイメージを使用してMySQLインスタンスを素...
<br />原文: http://www.mikkolee.com/13私は最近、ver...
序文まずここで説明させてください。インターネット上では、Alibaba では 500 万のデータを異...
前の 2 つの記事の簡単な紹介を通じて、Bootstrap についての基礎的な理解が得られました。 ...
初心者は、いくつかの HTML タグを理解することで HTML を学習できます。この入門書は、初心者...
実験環境: MYSQL 5.7.22バイナリログを有効にするログ形式 MIXED実験プロセス: 1....
方法1: onclickイベントを使用する <input type="button&...
序文Nodejs はサーバーサイド言語です。開発中、登録やログインなどでは、判断のためにフォームを通...
前面に書かれたWeibo コンポーネントは、サードパーティのアクセス ユーザーが開発を必要とせずに ...
概要いずれかのデータベースに対する操作は他のデータベースに自動的に適用され、2 つのデータベースのデ...
1. 要件の説明Divタグの右上隅に削除アイコンを表示します2. 実装html、CSS 3. 参照コ...
1. はじめにここでは apollo について詳しく説明しません。公式サイト https://git...
データベースデータをエクスポートします:まずcmdを開いてMySQLのbinフォルダに入ります1. ...