Sehen wir uns zunächst ein Beispiel für die Speicherfreigabe an: <SCRIPT LANGUAGE="JavaScript"> <!-- strTest = "1"; für (var i = 0; i < 25; i++) { strTest += strTest; } Alarm(strTest); strTest löschen; Müll sammeln(); //--> </SCRIPT> CollectGarbage ist eine einzigartige Eigenschaft des Internet Explorers, die zum Freigeben von Speicher verwendet wird. Die Verwendung sollte darin bestehen, die Variable oder das Referenzobjekt auf null zu setzen oder zu löschen und es dann freizugeben. Bevor CollectGarbage ausgeführt wird, müssen zwei notwendige Bedingungen erfüllt sein: - Ein Objekt wird außerhalb des Kontextes, in dem es lebt, ungültig. //--------------------------------------------------------- // Wann wird das JavaScript-Objekt ungültig//--------------------------------------------------------- Funktion testObjekt() { var _obj1 = neues Objekt(); } Funktion testObjekt2() { var _obj2 = neues Objekt(); gibt _obj2 zurück; } // Beispiel 1 Testobjekt(); // Beispiel 2 testObjekt2() // Beispiel 3 var obj3 = testObjekt2(); obj3 = null; // Beispiel 4 var obj4 = testObjekt2(); var arr = [obj4]; obj3 = null; arr = []; In diesen vier Beispielen: - "Beispiel 1" konstruiert _obj1 in der Funktion testObject(), aber wenn die Funktion beendet wird, - In „Beispiel 2“ wird auch ein Objekt _obj2 konstruiert und in testObject2() ausgegeben, so dass das Objekt eine Kontextumgebung (und einen Lebenszyklus) „außerhalb der Funktion“ hat. Da der Rückgabewert der Funktion jedoch nicht von anderen Variablen „gehalten“ wird, wird _obj2 sofort ungültig; – In „Beispiel 3“ wird _obj2, das von testObject2() erstellt wurde, von der externen Variable obj3 verwendet. – Aus dem gleichen Grund wie in Beispiel 3 wird _obj2 in Beispiel 4 nach der Zeile „arr = []“ ungültig. Allerdings bedeutet die „Ungültigkeitserklärung“ eines Objekts nicht, dass es „freigegeben“ wird. Innerhalb der JavaScript-Laufzeit gibt es keine Möglichkeit, dem Benutzer genau mitzuteilen, wann ein Objekt freigegeben wird. Dies basiert auf JavaScript Im vorherigen Beispielcode für Excel-Operationen kann der Eigentümer des Objekts, d. h. der Prozess „EXCEL.EXE“, erst auftreten, nachdem die „ActiveX-Objektinstanz freigegeben wurde“. Die Dateisperre und die Berechtigungsnachweise des Betriebssystems beziehen sich auf den Vorgang. Wenn das Objekt also nur "ungültig" und nicht "freigegeben" ist, ——Manche Leute sagen, dies sei ein Fehler im JavaScript- oder COM-Mechanismus. Eigentlich ist es das nicht. Das liegt am Betriebssystem und am Internet Explorer. Microsoft hat eine Strategie zur Lösung dieses Problems bekannt gegeben: das proaktive Aufrufen des Speicherrecyclingprozesses. In (Microsofts) JScript wird eine CollectGarbage()-Prozedur (normalerweise als GC-Prozedur bezeichnet) bereitgestellt. Der Code zum Aufrufen des GC-Prozesses im obigen Beispiel lautet: //--------------------------------------------------------- // Bei der Verarbeitung von ActiveX-Objekten die Standardaufrufmethode des GC-Prozesses //--------------------------------------------------------- Funktion schreibeXLS() { //(leicht...) excel.Beenden(); Excel = null; setTimeout(Garbage Collect, 1); } Die erste Codezeile ruft die Methode excel.Quit() auf, um den Excel-Prozess zu beenden und zu verlassen. Die zweite Codezeile setzt Excel auf Null, um die Objektreferenz zu löschen, wodurch das Objekt „ungültig“ wird. Da sich das Objekt jedoch immer noch im Funktionskontext befindet, wird das Objekt trotzdem nicht bereinigt, wenn der GC-Prozess direkt aufgerufen wird. Die dritte Codezeile verwendet setTimeout(), um die Funktion CollectGarbage aufzurufen, und das Zeitintervall wird auf „1“ gesetzt, wodurch der GC-Prozess erst nach der Ausführung der Funktion writeXLS() erfolgt. Auf diese Weise erfüllt das Excel-Objekt die Anforderung, " Der Einsatz des GC-Prozesses ist in der JS-Umgebung mit ActiveX-Objekten sehr effektiv. Einige potenzielle ActiveX Tatsächlich lässt sich das oben genannte Excel-Problem auch mit dem GC-Prozess nicht vollständig lösen. Weil der IE auch die Berechtigungsdaten zwischenspeichert. Die Anmeldeinformationen der Seite können nur durch „Wechseln zu einer neuen Seite“ aktualisiert werden. //--------------------------------------------------------- //Bei der Verarbeitung von ActiveX-Objekten verwendeter Seitenumschaltcode//--------------------------------------------------------- Funktion writeXLS() { //(leicht...) excel.Beenden(); Excel = null; // Der folgende Code wird verwendet, um einen Fehler im IE-Aufruf von Excel zu beheben; die Methode wird in MSDN bereitgestellt: // setzeTimeout(Garbage Collect, 1); // Da der vertrauenswürdige Status der Webseite nicht gelöscht (oder synchronisiert) werden kann, sind Methoden wie SaveAs() beim nächsten Aufruf ungültig. Standort.neu laden(); } Der Löschoperator wird im Handbuch beschrieben Verweise Entfernt eine Eigenschaft aus einem Objekt oder ein Element aus einem Array. Ausdruck löschen Der Ausdrucksparameter ist ein gültiger JScript-Ausdruck, normalerweise ein Eigenschaftsname oder ein Array-Element. veranschaulichen Wenn das Ergebnis des Ausdrucks ein Objekt ist und das im Ausdruck angegebene Attribut vorhanden ist, das Objekt jedoch keine Löschung zulässt, wird „false“ zurückgegeben. In allen anderen Fällen wird „true“ zurückgegeben. Abschließend noch ein ergänzender Hinweis zu GC: Wenn das IE-Fenster minimiert wird, ruft der IE einmal aktiv die Funktion CollectGarbage() auf. Dadurch wird die Speichernutzung nach der Minimierung des IE-Fensters erheblich verbessert. Dies ist das Ende dieses Artikels über den detaillierten Fall der JavaScript-Funktion CollectGarbage. Weitere relevante Inhalte zur Funktion CollectGarbage von js finden Sie in den vorherigen Artikeln von 123WORDPRESS.COM oder in den folgenden verwandten Artikeln. Ich hoffe, dass jeder 123WORDPRESS.COM in Zukunft unterstützen wird! Das könnte Sie auch interessieren:
|
Inhaltsverzeichnis 1. Traversal-Klasse 1. fürJede...
MySQL meldet den folgenden Fehler Ich ging zu „Sy...
Inhaltsverzeichnis Konzept Array-Destrukturierung...
Vorwort Die MySQL Master-Slave-Replikation ist di...
Inhaltsverzeichnis Vorwort 1. Grundlegende Verwen...
Inhaltsverzeichnis 1 Unterschied 1.1 Raumbelegung...
Der spezifische Code zur Implementierung des einz...
Vorwort Das dreispaltige Layout ist, wie der Name...
Die Online-Suche zum Ändern der Grub-Startzeit be...
Methode 1 Code kopieren Der Code lautet wie folgt:...
Vor ein paar Tagen habe ich mit einem Freund etwa...
So verwenden Sie Iframe: Code kopieren Der Code l...
Viele Freunde, die gerade angefangen haben, Websei...
undefined Wenn wir in JavaScript feststellen möch...
Vor einiger Zeit stieß ich auf das Problem, dass ...