2009-02-06 7 views
6

Hier ist der Test-URLIE und Memory-Akkumulation in Javascript

http://edventures.com/temp/divtest.php

Vorgehen:

  1. Schließen Sie alle Instanzen IE.
  2. Öffnen Sie die URL in IE7
  3. Öffnen Sie den Task-Manager, für
  4. nun von IE verbraucht Speicher sehen
  5. auf die Schaltfläche Erstellen klicken,
  6. Uhr der Speicher es
  7. nun um etwa 2K
  8. aufspringen wird klicken Sie auf Zerstöre Knopf und der DIV wird zerstört, aber die Erinnerung bleibt gleich.
  9. Sie können es wiederholt versuchen und Speicher addiert nur.

Gibt es eine Möglichkeit, dies zu beheben? Gibt es eine Möglichkeit, Garbage Collector mit Nachdruck aufzurufen, ohne das Fenster neu zu laden?

Ich bin unter der Annahme, dass wenn ich DIV entferne der Speicher freigegeben wird, aber scheint nicht so zu arbeiten.

Bitte lassen Sie mich irgendeine Lösung zu diesem Problem.

Danke für Ihre Hilfe.

Suhas

Antwort

10

So erstellen Sie DOM-Elemente und verhindern Speicherlecks in IE.

Sie können Variationen des try/finally-Tricks verwenden, um Lecks bei anderen DOM-Operationen zu verhindern.

+0

Ich bin mir nicht sicher, was dieser Code tat oder wie ist es anders aber daammmm es funktioniert viel besser, ich habe versucht, 3 Divs mit verschiedenen IDs zu öffnen und Speicher bleibt ziemlich konstant, Sie sind ein talentierter Mensch, vielen Dank !! !!!!!!!! Suhas – user63362

+0

Haha, willkommen. Der Unterschied besteht darin, dass das in der Funktion erstellte Element nicht von der Garbage Collection bereinigt wird. Was auch immer in der finally-Anweisung passiert, wird egal was passieren. Also, im Grunde steckst du IE's beschissene Müllsammlung. – tj111

+0

Ordentlicher Trick! Ich denke, Sie müssen immer noch die zurückgegebenen el manuell zerstören, wenn Sie es in der aufrufenden Code speichern? – meouw

0

Ja - IE hat einige schreckliche Speicherlecks.

Check out IE Drip - Sie müssen im Grunde Ihre Seiten so zu gestalten, dass sie nicht tun, was IE so leck macht.

Dies ist einer der Gründe, warum IE so verabscheut wird.

Um IE-Leaking zu vermeiden, müssen Sie sehr vorsichtig sein, wie Sie der Seite HTML-Elemente hinzufügen, insbesondere Tabellen. Seien Sie besonders vorsichtig mit Nicht-HTML-3.2-Attributen - IE7 ist immer noch grundsätzlich IE4 und Attribute, die außerhalb der alten HTML-Spezifikationen liegen, sind dort, wo es dazu neigt, falsch zu laufen.

+0

Vielen Dank für die schnelle Antwort, aber nach http://blogs.msdn.com/gpde/pages/javascript-memory-leak-detector.aspx Es ist kein Speicherleck erkannt. Es scheint, dass der GC nicht oft genug aufgerufen wird. Irgendwelche Vorschläge? Thx – user63362

+0

GC in Javascript ist ziemlich schlecht - Sie haben sicherlich nicht die Art von Kontrolle, die Sie in C# oder Java erwarten würden. Einer der Gründe, warum Chrome und die nächsten FX so viel schneller sind, liegt darin, dass sie GC (endlich) richtig machen. – Keith

0

Haben Sie dieses Experiment in anderen Browsern versucht? Firefox Speicherverbrauch ist viel schlimmer als IE auf meinem Rechner ...