Referencias circulares a objetos DOM en una página HTML producen una pérdida de memoria

Seleccione idioma Seleccione idioma
Id. de artículo: 830555 - Ver los productos a los que se aplica este artículo
Expandir todo | Contraer todo

En esta página

Síntomas

Se produce una pérdida de memoria cuando actualiza una página HTML que utiliza código Microsoft JScript que contenga referencias circulares a objetos en Document Object Model (DOM) de Microsoft Internet Explorer.

Causa

Esta pérdida de memoria se produce porque los objetos DOM son objetos de JScript no. Objetos DOM no están en la combinación de colección de elementos no utilizados marca y barrido de JScript. Por lo tanto, la referencia circular entre los objetos DOM y los controladores de JScript no se romperá hasta que el explorador destruye completamente la página. Esta pérdida de memoria finalizará cuando el explorador abre una nueva página Web o cuando se cierra la ventana del explorador.

Solución

Para resolver este problema, se debe evitar referencias circulares a objetos de Internet Explorer DOM en el código JScript. Para evitar este problema en el código de ejemplo que se incluye en la sección "Más información" de este artículo, realice el siguiente cambio:
function hookup(element)
{
    element.attachEvent( "onmouseover", mouse);
}
function mouse () 
{
}
con este cambio, la función del mouse (ratón) no es un objeto de cierre que conduce a una referencia circular.

Estado

Microsoft ha confirmado que se trata de un error de los productos de Microsoft enumerados en la sección "La información de este artículo se refiere a:".

Más información

Pasos para reproducir el comportamiento

  1. Pegue el código siguiente en Bloc de notas y, a continuación, guarde el archivo como 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>
    en este código, el controlador (la función mouse ) está anidado dentro del attacher (la función de enlace ). Esta disposición significa que el controlador está cerrado en el ámbito del llamador (esta organización se denomina "cierre"). El controlador mantiene una referencia al elemento variable. En este caso, el elemento de variable es el elemento div HTML con el parámetro ID que se establece en el menú . Pero el elemento div hace referencia al controlador. Esta referencia es una referencia circular.
  2. Abra Test.htm en Internet Explorer.

    Observe que el uso de memoria en el Administrador de tareas de Windows sigue aumentando cada vez que la página actualiza.

Referencias

Para obtener más información acerca de patrones de pérdida de Internet Explorer, visite el siguiente sitio Web de Microsoft Developer Network (MSDN):
http://msdn2.microsoft.com/en-us/library/Bb250448.aspx

Propiedades

Id. de artículo: 830555 - Última revisión: viernes, 2 de noviembre de 2007 - Versión: 3.4
La información de este artículo se refiere a:
  • Microsoft Internet Explorer (Programming) 6.0
  • Microsoft Internet Explorer 5.5
  • Microsoft Internet Explorer 5.01
Palabras clave: 
kbmt kbfix kbbug KB830555 KbMtes
Traducción automática
IMPORTANTE: Este artículo ha sido traducido por un software de traducción automática de Microsoft (http://support.microsoft.com/gp/mtdetails) en lugar de un traductor humano. Microsoft le ofrece artículos traducidos por un traductor humano y artículos traducidos automáticamente para que tenga acceso en su propio idioma a todos los artículos de nuestra base de conocimientos (Knowledge Base). Sin embargo, los artículos traducidos automáticamente pueden contener errores en el vocabulario, la sintaxis o la gramática, como los que un extranjero podría cometer al hablar el idioma. Microsoft no se hace responsable de cualquier imprecisión, error o daño ocasionado por una mala traducción del contenido o como consecuencia de su utilización por nuestros clientes. Microsoft suele actualizar el software de traducción frecuentemente.
Haga clic aquí para ver el artículo original (en inglés): 830555
Renuncia a responsabilidad de los contenidos de la KB sobre productos a los que ya no se ofrece asistencia alguna
El presente artículo se escribió para productos para los que Microsoft ya no ofrece soporte técnico. Por tanto, el presente artículo se ofrece "tal cual" y no será actualizado.

Enviar comentarios

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com