Zirkuläre Verweise auf DOM-Objekte auf einer HTML-Seite verursachen einen Arbeitsspeicherverlust

Veralteter Haftungsausschluss für KB-Inhalte

Dieser Artikel wurde für Produkte geschrieben, für die Microsoft keinen Support mehr anbietet. Deshalb wird dieser Artikel im vorliegenden Zustand bereitgestellt und nicht mehr aktualisiert.

Fehler #: 28355 (IEOESE)

Problembeschreibung

Ein Speicherverlust tritt auf, wenn eine HTML-Seite aktualisieren, die Microsoft JScript-Code verwendet, die zyklische Verweise auf Objekte in der Microsoft Internet Explorer (DOKUMENTOBJEKTMODELL) enthält.

Ursache

Dieser Speicherverlust tritt auf, da DOM-Objekte nicht JScript-Objekte sind. DOM-Objekte sind nicht in das Schema Mark Sweep Garbage Collection JScript. Zirkelbezug zwischen DOM-Objekte und die JScript-Handler ist daher nicht unterbrochen, bis der Browser vollständig unten Tränen. Dieser Speicherverlust wird beendet, wenn der Browser öffnet eine neue Webseite oder wenn das Browserfenster geschlossen wird.

Problemlösung

Um dieses Problem zu beheben, vermeiden Sie Zirkelverweise Internet Explorer DOM-Objekte in Jscript-Code. Zum Umgehen dieses Problems im Code, die im Abschnitt "Weitere Informationen" dieses Artikels enthalten ist, ändern:
function hookup(element){
element.attachEvent( "onmouseover", mouse);
}
function mouse ()
{
}

Diese Änderung ist die Maus funktionieren kein Closure-Objekt, das einen Zirkelverweis führt.

Status

Microsoft hat bestätigt, dass es einen Fehler in den Microsoft-Produkten gibt, die im Abschnitt "Gilt für" aufgeführt sind.

Weitere Informationen

Schritte zum Reproduzieren des Verhaltens

  1. Fügen Sie folgenden Code im Editor, und speichern Sie die Datei unter dem Namen Test.htm:
    <HTML><HEAD>
    <script language="javascript">
    function initpage()
    {
    window.setTimeout("window.location.reload()", 500, "javascript");
    }
    </script>
    </HEAD>
    <body onload="initpage()" >
    <div class='menu' id='menu'></div>
    <script language='javascript'>
    hookup(document.getElementById('menu'));
    function hookup(element)
    {
    element.attachEvent( "onmouseover", mouse);
    function mouse ()
    {
    }
    }
    </script>
    </body>
    </HTML>
    In diesem Code wird der Handler (die Maus -Funktion) in Attacher ( Anschluß -Funktion) geschachtelt. Diese Anordnung bedeutet, dass der Ereignishandler über den Bereich des Aufrufers geschlossen ist (Dadurch wird "Abschluss" bezeichnet). Der Handler verwaltet einen Verweis auf die Variable Element. In diesem Fall ist das Variable Element Div HTML-Element mit dem ID -Parameter, der zum Menüfestgelegt ist. Aber das Div -Element der Handler. Dieser Verweis ist ein Zirkelverweis.
  2. Öffnen Sie Test.htm in InternetExplorer.

    Beachten Sie, dass die Speicherverwendung im Windows Task-Manager weiterhin jedes Mal die Seite selbst aktualisiert.

Referenzen

Weitere Informationen zu Internet Explorer Speicherverlust Mustern finden Sie auf der folgenden Microsoft Developer Network (MSDN)-Website:
Eigenschaften

Artikelnummer: 830555 – Letzte Überarbeitung: 16.01.2017 – Revision: 1

Feedback