2009-02-06 19 views
6

Aquí está el URL de pruebaIE y memoria de acumulación en Javascript

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

Procedimiento:

  1. Cierre todas las instancias de IE.
  2. Abrir la URL en Internet Explorer 7
  3. Abrir el administrador de tareas, busque memoria consumida por el IE
  4. Ahora haga clic en el botón Crear,
  5. reloj de la memoria que va a saltar por sobre 2K
  6. Ahora haga clic en Destruye el botón y el DIV se destruirá pero la memoria seguirá siendo la misma.
  7. Puede intentarlo varias veces y la memoria simplemente aumenta.

¿Hay alguna manera de arreglar esto? ¿Alguna manera de llamar al recolector de basura sin cargar la ventana?

Estoy bajo la suposición de que cuando elimine DIV la memoria se liberará pero no parece funcionar de esa manera.

Háganme saber cualquier solución a esto.

Gracias por su ayuda.

Suhas

Respuesta

10

Así es cómo crear elementos DOM y evitar pérdidas de memoria en IE.

function createDOMElement(el) { 
    var el = document.createElement(el); 

    try { 
    return el; 
    } 
    finally { 
    el = null; 
    } 
} 

Puede usar variaciones del truco try/finally para evitar fugas al realizar otras operaciones DOM.

+0

No estoy seguro de lo que hizo este código o cómo es diferente pero daammmm funcionó mucho mejor, traté de abrir 3 Divs con diferentes ids y la memoria se mantiene bastante constante, ¡Eres una persona talentosa, muchas gracias! !!!!!!!! Suhas – user63362

+0

Haha su bienvenida. La diferencia es que el elemento creado en la función no es limpiado por la recolección de basura. Lo que ocurra en la declaración final se ejecutará sin importar qué. Así que, básicamente, su parche atascado colección de basura de IE. – tj111

+0

¡Buen truco! ¿Supongo que todavía tiene que destruir manualmente el elemento devuelto si lo almacena en el código de llamada? – meouw

0

Sí - IE tiene unas tremendas pérdidas de memoria.

Echa un vistazo IE Drip - básicamente tienes que diseñar tus páginas para que no hagan lo que hace que IE escape de esta manera.

Esto es parte de la razón por la que IE es tan detestado.

Para evitar la filtración de IE, debe tener mucho cuidado con la forma de agregar elementos HTML a la página, especialmente las tablas. Tenga especial cuidado con los atributos que no son HTML 3.2: IE7 sigue siendo básicamente IE4 y los atributos externos a las antiguas especificaciones HTML son los que tienden a fallar.

+0

Gracias por la respuesta rápida, pero según http://blogs.msdn.com/gpde/pages/javascript-memory-leak-detector.aspx no se detectó fuga de memoria. Parece que el GC no se llama con la frecuencia suficiente. ¿Alguna sugerencia? Thx – user63362

+0

GC en javascript es bastante pobre - ciertamente no tiene el tipo de control que esperaría en C# o Java. Una de las razones por las que Chrome y el próximo FX son mucho más rápidos es porque hacen GC correctamente (por fin). – Keith

0

¿Ha probado este experimento en otros navegadores? El consumo de memoria de Firefox es mucho peor que el de IE en mi máquina ...