Utilização da memória aumenta quando executa uma aplicação do Visual Basic 2008 que cria uma instância de uma classe ou Visual Basic 2005

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

Nesta página

Sintomas

Considere o seguinte cenário:
  • Criar uma aplicação do Microsoft Visual Basic no Microsoft Visual Studio 2005 ou no Visual Studio 2008.
  • Aplicação do Visual Basic contém uma classe.
  • A classe contém um evento.
  • Aplicação do Visual Basic cria uma instância da classe.
  • Compilar aplicação do Visual Basic em modo de depuração.
Neste cenário, quando executar a aplicação do Visual Basic, utilização da memória aumenta.

Nota É mais provável que notar este comportamento quando se verificam as seguintes condições:
  • A aplicação do Visual Basic é executada continuamente durante um longo período de tempo.
  • Aplicação do Visual Basic cria várias instâncias da classe que contém um evento. Se são criadas instâncias suficientes horas, a aplicação, eventualmente, irá falhar com uma OutOfMemoryException ou "memória" erro. Por exemplo, a aplicação do Visual Basic contém um ciclo cria várias instâncias da classe.

Causa

Este problema ocorre porque o Edit and Continue depuração funcionalidade no Visual Studio 2005 ou no Visual Studio 2008 mantém uma lista de fracas referências a objectos que foram criados. Se o objecto que foi criado uma classe que contém um evento, estas referências fracas são mantidas para a duração do programa. Este comportamento aumenta a utilização da memória.

Resolução

Para resolver este problema, utilize um dos seguintes métodos.

Método 1: Reiniciar a aplicação do Visual Basic

Pode reiniciar a aplicação do Visual Basic. Quando o fizer, a memória é libertada.

Método 2: Compilar a aplicação do Visual Basic em modo de edição

Pode compilar a aplicação do Visual Basic no modo de edição. Quando executa uma aplicação do Visual Basic que foi compilada no modo de edição, a utilização da memória não aumenta quando criar uma instância de uma classe que contém um evento.

Mais Informação

Passos para reproduzir o problema

  1. Inicie o Visual Studio 2005 ou o Visual Studio 2008.
  2. No menu ficheiro , aponte para Novo e, em seguida, clique em projecto .
  3. Em tipos de projecto , clique em Visual Basic . Se não conseguir ver o tipo de projecto do Visual Basic, expanda Outros idiomas e, em seguida, clique em Visual Basic .
  4. Em modelos , clique em Consola de aplicação .
  5. Escreva um nome de projecto e, em seguida, clique em OK .
  6. Substituir todos os códigos na janela código o seguinte código.
    Module Module1
    
      Private Sub CreateClassWithEvent()
        Dim TestClass As New CLeak
      End Sub
    
      Sub Main()               
        ' This loop infinitely creates a class that contains an event.
        While True
          CreateClassWithEvent()
          System.GC.Collect()
          System.GC.WaitForPendingFinalizers()
          Threading.Thread.Sleep(50)
        End While
      End Sub
    
    End Module
    
    Class CLeak
      Event myEvent()
    End Class
    
  7. No menu Debug , clique em Iniciar a depuração .

Propriedades

Artigo: 919481 - Última revisão: 27 de março de 2009 - Revisão: 2.0
A informação contida neste artigo aplica-se a:
  • Microsoft Visual Studio 2008 Standard Edition
  • Microsoft Visual Studio 2008 Professional Edition
  • Microsoft Visual Studio 2005 Team System Architect Edition
  • Microsoft Visual Studio 2005 Team System Developer Edition
  • Microsoft Visual Studio 2005 Team System Test Edition
  • Microsoft Visual Studio 2005 Team System Team Foundation:
  • Microsoft Visual Studio 2005 Standard Edition
  • Microsoft Visual Studio 2005 Professional
  • Microsoft Visual Studio 2005 Express Edition
  • Microsoft Visual Basic 2005
Palavras-chave: 
kbmt kbtshoot kbprb KB919481 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: 919481

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