Referências circulares a objectos DOM numa página HTML causam uma fuga de memória

Traduções de Artigos Traduções de Artigos
Artigo: 830555 - Ver produtos para os quais este artigo se aplica.
Expandir tudo | Reduzir tudo

Nesta página

Sintomas

Ocorre uma fuga de memória quando actualiza uma página HTML que utiliza o código Microsoft JScript que contém referências circulares a objectos no Microsoft Internet Explorer Document Object Model (DOM).

Causa

Esta fuga de memória ocorre porque os objectos DOM são objectos de JScript não. Os objectos DOM não estão no esquema de colecção de marca e Varrer lixo do JScript. Por conseguinte, a referência circular entre os objectos DOM e os processadores de JScript não sejam quebrada até que o browser tears totalmente para baixo na página. Esta fuga de memória terminará quando o browser abre uma nova página Web ou quando a janela do browser é fechada.

Resolução

Para resolver este problema, evite referências circulares a objectos DOM do Internet Explorer no código JScript. Para contornar este problema no código de exemplo incluído na secção "Mais informação" deste artigo, efectue a alteração seguinte:
function hookup(element)
{
    element.attachEvent( "onmouseover", mouse);
}
function mouse () 
{
}
com esta alteração, a função rato não é um objecto de encerramento que conduz a uma referência circular.

Ponto Da Situação

A Microsoft confirmou que este erro ocorre nos produtos do Microsoft listados na secção "Aplica-se a".

Mais Informação

Passos para reproduzir o comportamento

  1. Cole o seguinte código no bloco de notas e, em seguida, guarde o ficheiro 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>
    este código, a rotina de tratamento (a função rato ) está aninhada attacher (a função hookup ). Esta disposição significa que o processador está fechado sobre o âmbito do autor da chamada (esta disposição é denominada um "encerramento"). A rotina de tratamento mantém uma referência ao elemento variável. Neste caso, o elemento variável é o elemento div HTML com o parâmetro de ID que está definido para o menu . Mas o elemento div se refere a rotina de tratamento. Esta referência é uma referência circular.
  2. Abra Test.htm no Internet Explorer.

    Repare que a utilização da memória no Gestor de tarefas do Windows continua a aumentar sempre actualiza a página propriamente dita.

Referências

Para obter mais informações sobre padrões de fuga do Internet Explorer, visite o seguinte Web site da Microsoft Developer Network (MSDN):
http://msdn2.microsoft.com/en-us/library/Bb250448.aspx

Propriedades

Artigo: 830555 - Última revisão: 2 de novembro de 2007 - Revisão: 3.4
A informação contida neste artigo aplica-se a:
  • Microsoft Internet Explorer (Programming) 6.0
  • Microsoft Internet Explorer 5.5
  • Microsoft Internet Explorer 5.01
Palavras-chave: 
kbmt kbfix kbbug KB830555 KbMtpt
Tradução automática
IMPORTANTE: Este artigo foi traduzido por um sistema de tradução automática (também designado por Machine translation ou MT), não tendo sido portanto revisto ou traduzido por humanos. A Microsoft tem artigos traduzidos por aplicações (MT) e artigos traduzidos por tradutores profissionais. O objectivo é simples: oferecer em Português a totalidade dos artigos existentes na base de dados do suporte. Sabemos no entanto que a tradução automática não é sempre perfeita. Esta pode conter erros de vocabulário, sintaxe ou gramática? erros semelhantes aos que um estrangeiro realiza ao falar em Português. A Microsoft não é responsável por incoerências, erros ou estragos realizados na sequência da utilização dos artigos MT por parte dos nossos clientes. A Microsoft realiza actualizações frequentes ao software de tradução automática (MT). Obrigado.
Clique aqui para ver a versão em Inglês deste artigo: 830555
Exclusão de Responsabilidade para Conteúdo sem Suporte na KB
Este artigo foi escrito sobre produtos para os quais a Microsoft já não fornece suporte. Por conseguinte, este artigo é oferecido "tal como está" e deixará de ser actualizado.

Submeter comentários

 

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