CORRECÇÃO:, Poderá notar uma fuga de memória quando utiliza o controlo DateTimePicker no .NET Framework 1.0

Traduções de Artigos Traduções de Artigos
Artigo: 813354 - Ver produtos para os quais este artigo se aplica.
Este artigo foi arquivado. Este artigo é oferecido "tal como está" e deixará de ser actualizado.
Expandir tudo | Reduzir tudo

Nesta página

Sintomas

Se criar uma aplicação utilizando o Microsoft .NET Framework versão 1.0 e utilizar o controlo DateTimePicker na aplicação, poderá notar uma fuga de memória quando executa a aplicação.

Causa

Este problema ocorre porque o recolector de lixo não recolhe memória inacessível. O controlo DateTimePicker está associado com o delegado Microsoft.Win32.UserPreferenceChangedEventHandler . Cancelou a quando a venda/abate de um objecto do controlo DateTimePicker , este delegado não é referência. Por conseguinte, este delegado impede o recolector de lixo recolher o objecto de controlo DateTimePicker .

Resolução

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

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

Ponto Da Situação

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

Mais Informação

Passos para reproduzir o comportamento

  1. Crie uma aplicação do Microsoft Windows. Para o fazer, siga estes passos:
    1. Inicie o Microsoft Visual Studio NET..
    2. No menu ficheiro , aponte para Novo e, em seguida, clique em projecto . A caixa de diálogo novo projecto é apresentada.
    3. Em Project Types , clique em Visual C# Projects .
    4. Em modelos , clique em Aplicação do Windows .
    5. Na caixa nome , escreva MyProject e, em seguida, clique em OK . Por predefinição, é criado um formulário é denominado Form1.
    6. No menu Ver , clique em caixa de ferramentas .
    7. Adicione três controlos de caixa de texto ao formulário Form1. Por predefinição, o controlo de caixa de texto textBox1 , o controlo de caixa de texto textBox2 e o controlo de caixa de texto textBox3 são criados.
    8. Adicione dois controlos botão ao formulário Form1. Por predefinição, o controlo de botão button1 e o controlo de botão button2 são criados.
    9. Adicione o seguinte código ao processador 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 obtém o número de bytes actualmente atribuídos na memória gerida.
    10. No formulário Form1, faça duplo clique em button1 e, em seguida, adicione o seguinte código ao processador 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, faça duplo clique em button2 e, em seguida, adicione o seguinte código ao processador 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 recolha de dados e tenta recolher toda a memória inacessível e dereferenced.
    12. No menu ficheiro , clique em Guardar tudo para guardar todos os ficheiros.
  2. Compilar e executar a aplicação do Windows. Para o fazer, siga estes passos:
    1. No menu criar , clique em criar soluções .
    2. No menu Debug , clique em Iniciar . A caixa de diálogo Form1 é apresentada. O número de bytes que estão atribuídos na memória gerida aparece na caixa de texto textBox1 .
    3. Clique em button1 .

      A aplicação cria uma instância do controlo DateTimePicker em tempo de execução e, em seguida, disposes do controlo DateTimePicker . Este comportamento ocorre 100 vezes. O número de bytes na memória gerida depois de 100 ocorrências aparece na caixa de texto textBox2 . O recolector de lixo não recolhe as localizações de memória inacessível.
    4. Clique em button2 .

    O número de bytes que permanecem na memória gerida após a aplicação chamar o recolector de lixo apresentado na caixa de texto textBox2 . Poderá notar que a maior parte do inacessível memória ainda está em memória gerida.
Para obter informações adicionais, clique no número de artigo que se segue para visualizar o artigo in the Microsoft Knowledge Base:
824684Descrição da terminologia padrão que é utilizada para descrever actualizações de software da Microsoft

Referências

Para obter mais informações sobre o delegado UserPreferenceChangedEventHandler , visite o seguinte Microsoft Developer Network (MSDN) Web 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 Web MSDN:
http://msdn2.microsoft.com/en-us/library/system.windows.forms.datetimepicker(vs.71).aspx

Propriedades

Artigo: 813354 - Última revisão: 29 de janeiro de 2014 - 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 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: 813354

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