Uso de memória aumenta quando você executa um aplicativo Visual Basic 2008 que cria uma instância de uma classe ou Visual Basic 2005

Traduções deste artigo Traduções deste artigo
ID do artigo: 919481 - Exibir os produtos aos quais esse artigo se aplica.
Expandir tudo | Recolher tudo

Neste artigo

Sintomas

Considere o seguinte cenário:
  • Você cria um aplicativo do Microsoft Visual Basic no Microsoft Visual Studio 2005 ou no Visual Studio 2008.
  • O aplicativo Visual Basic contém uma classe.
  • A classe contém um evento.
  • O aplicativo Visual Basic cria uma instância da classe.
  • Você compilar o aplicativo Visual Basic no modo de depuração.
Nesse cenário, quando você executa o aplicativo Visual Basic, uso da memória aumenta.

Observação Você provavelmente observar esse comportamento ao seguintes condições forem verdadeiras:
  • O aplicativo Visual Basic é executado continuamente por um longo tempo.
  • O aplicativo Visual Basic cria várias instâncias da classe que contém um evento. Se instâncias forem criadas suficiente, o aplicativo eventualmente falhará com uma OutOfMemoryException ou "out of memory" erro. Por exemplo, o aplicativo Visual Basic contém um loop que cria várias instâncias da classe.

Causa

Esse problema ocorre porque o Edit and continue depuração recurso no Visual Studio 2005 ou no Visual Studio 2008 mantém uma lista de referências fracas a objetos que foram criados. Se o objeto que tenha sido criado é uma classe que contém um evento, essas referências fracas são mantidas durante ao programa. Esse comportamento aumenta o uso de memória.

Resolução

Para resolver esse problema, use um dos seguintes métodos.

Método 1: Reiniciar o aplicativo Visual Basic

Você pode reiniciar o aplicativo Visual Basic. Quando você fizer isso, a memória é liberada.

Método 2: Compilar o aplicativo Visual Basic no modo de versão

Você pode compilar o aplicativo Visual Basic no modo de versão. Quando você executa um aplicativo Visual Basic que foi compilado no modo de versão, o uso de memória não aumenta quando você cria uma instância de uma classe que contém um evento.

Mais Informações

Etapas para reproduzir o problema

  1. Inicie o Visual Studio 2005 ou Visual Studio 2008.
  2. No menu arquivo , aponte para novo e, em seguida, clique em Project .
  3. Em Project types , clique em Visual Basic . Se você não puder ver o tipo de projeto do Visual Basic, expanda Outros idiomas e, em seguida, clique em Visual Basic .
  4. Em modelos , clique em Aplicativo de console .
  5. Digite um nome de projeto e, em seguida, clique em OK .
  6. Substituir todo o código na janela código com 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 Start Debugging .

Propriedades

ID do artigo: 919481 - Última revisão: sexta-feira, 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 Edition
  • 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 traduzido ou revisto por pessoas. A Microsoft possui artigos traduzidos por aplicações (MT) e artigos traduzidos por tradutores profissionais, com o objetivo de oferecer em português a totalidade dos artigos existentes na base de dados de suporte. No entanto, a tradução automática não é sempre perfeita, podendo conter erros de vocabulário, sintaxe ou gramática. A Microsoft não é responsável por incoerências, erros ou prejuízos ocorridos em decorrência da utilização dos artigos MT por parte dos nossos clientes. A Microsoft realiza atualizações freqüentes 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