CORRECÇÃO: Você pode perceber um vazamento de memória ao usar o controle DateTimePicker no .NET Framework 1.0

Traduções deste artigo Traduções deste artigo
ID do artigo: 813354 - Exibir os produtos aos quais esse artigo se aplica.
Este artigo foi arquivado. É oferecido "como está" e não será mais atualizado.
Expandir tudo | Recolher tudo

Neste artigo

Sintomas

Se você criar um aplicativo usando o Microsoft .NET Framework versão 1.0 e usar o controle DateTimePicker no aplicativo, você pode perceber um vazamento de memória ao executar o aplicativo.

Causa

Esse problema ocorre porque o coletor de lixo não coleta a memória inacessível. O controle DateTimePicker está associado com o delegado Microsoft.Win32.UserPreferenceChangedEventHandler . Excluiu a referência ao quando dispor de um objeto do controle DateTimePicker , esse representante não é chegar. Portanto, esse representante impede o coletor de lixo coletando o objeto de controle DateTimePicker .

Resolução

Para resolver esse problema, obtenha o service pack mais recente para o .NET Framework 1.0.

Para obter o service pack mais recente, visite o seguinte site:
http://www.microsoft.com/downloads/details.aspx?familyid=6978D761-4A92-4106-A9BC-83E78D4ABC5B&displaylang=en

Situação

A Microsoft confirmou que este é um problema nos produtos da Microsoft listados na seção "Aplica-se a". Esse problema foi corrigido primeiro no Microsoft .NET Framework 1.0 Service Pack 3.

Mais Informações

Etapas para reproduzir o comportamento

  1. Crie um aplicativo do Microsoft Windows. Para fazer isso, execute as seguintes etapas:
    1. Inicie o Microsoft Visual Studio NET..
    2. No menu arquivo , aponte para novo e, em seguida, clique em Project . A caixa de diálogo New Project é exibida.
    3. Em Project Types , clique em projetos translation from VPE for Csharp Visual .
    4. Em modelos , clique em Windows Application .
    5. Na caixa nome , digite MyProject e, em seguida, clique em OK . Por padrão, um formulário que é denominado Form1 é criado.
    6. No menu Exibir , clique em caixa de ferramentas .
    7. Adicione três controles TextBox ao formulário Form1. Por padrão, o controle de TextBox textBox1 , o controle de TextBox textBox2 e o controle TextBox textBox3 são criados.
    8. Adicione dois controles Button ao formulário Form1. Por padrão, o controle de botão button1 e o controle de botão button2 são criados.
    9. Adicione o seguinte código ao manipulador de eventos Form1_Load do formulário Form1.
      GC.Collect();
      GC.WaitForPendingFinalizers();
      long before = GC.GetTotalMemory(true);
      textBox1.Text ="Before test: " + before.ToString();
      o método GC.GetTotalMemory recupera o número de bytes alocados no momento na memória gerenciada.
    10. No formulário Form1, clique duas vezes em button1 e, em seguida, adicione o seguinte código ao manipulador de eventos Button1_Click do formulário Form1.
      long after;
      for (int i=0; i<100; i++) 
      {
      DateTimePicker dtp=new DateTimePicker();	
      dtp.Dispose();
      dtp=null;
      }
      after = GC.GetTotalMemory(true);
      textBox2.Text = " After test: " + after.ToString();
    11. No formulário Form1, clique duas vezes em button2 e, em seguida, adicione o seguinte código ao manipulador de eventos button2_Click no formulário Form1.
      GC.Collect();
      GC.WaitForPendingFinalizers();
      long after = GC.GetTotalMemory(true);
      textBox2.Text = " After Garbage Collection: " + after.ToString();
      o método GC.Collect força a coleta de lixo e tenta coletar toda a memória inacessível e dereferenced.
    12. No menu arquivo , clique em Salvar tudo para salvar todos os arquivos.
  2. Criar e executar o aplicativo do Windows. Para fazer isso, execute as seguintes etapas:
    1. No menu Build , clique em Build Solution .
    2. No menu Debug , clique em Iniciar . A caixa de diálogo Form1 será exibida. O número de bytes alocados em memória gerenciada aparece na caixa de texto textBox1 .
    3. Clique em button1 .

      O aplicativo cria uma instância do controle DateTimePicker em tempo de execução e, em seguida, descarta do controle DateTimePicker . Esse comportamento ocorre 100 vezes. O número de bytes de memória gerenciada depois de 100 ocorrências aparece na caixa de texto textBox2 . O coletor de lixo não coleta os locais de memória inacessível.
    4. Clique em button2 .

    O número de bytes que permanecem na memória gerenciada após o aplicativo chama o coletor de lixo aparecem na caixa de texto textBox2 . Você pode observar que a maioria do inacessível memória ainda está na memória gerenciada.
Para obter informações adicionais, clique no número abaixo para ler o artigo in the Microsoft Knowledge Base:
824684Descrição da terminologia padrão que é usada para descrever as atualizações de software da Microsoft

Referências

Para obter mais informações sobre o delegado UserPreferenceChangedEventHandler , visite o seguinte Microsoft Developer Network (MSDN) site:
http://msdn2.microsoft.com/en-us/library/microsoft.win32.userpreferencechangedeventhandler(vs.71).aspx
Para obter mais informações sobre a classe DateTimePicker , visite o seguinte site da MSDN:
http://msdn2.microsoft.com/en-us/library/system.windows.forms.datetimepicker(vs.71).aspx

Propriedades

ID do artigo: 813354 - Última revisão: sábado, 26 de outubro de 2013 - Revisão: 1.5
A informação contida neste artigo aplica-se a:
  • Microsoft .NET Framework 1.0
Palavras-chave: 
kbnosurvey kbarchive kbmt kbhotfixserver kbqfe kbmemory kbgarbagecollect kbforms kbcode kbbug kbfix kbqfe kbnetframe100presp3fix KB813354 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: 813354

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