Entrar

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

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.

813354
Este artigo foi arquivado. É oferecido "como está" e não será mais atualizado.
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:
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:Para obter mais informações sobre a classe DateTimePicker , visite o seguinte site da MSDN:
Vazamento de memória de controle DateTimePicker

Aviso: Este artigo foi traduzido automaticamente

Propriedades

ID do Artigo: 813354 - Última Revisão: 10/26/2013 18:07:03 - Revisão: 1.5

  • Microsoft .NET Framework 1.0
  • kbnosurvey kbarchive kbmt kbhotfixserver kbqfe kbmemory kbgarbagecollect kbforms kbcode kbbug kbfix kbqfe kbnetframe100presp3fix KB813354 KbMtpt
Comentários