Você está offline; aguardando reconexão

CORRECÇÃO:, Poderá notar uma fuga de memória quando utiliza o controlo 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 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
Este artigo foi arquivado. Este artigo é oferecido "tal como está" e deixará de ser actualizado.
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:
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:Para obter mais informações sobre a classe DateTimePicker , visite o seguinte site da Web MSDN:
DateTimePicker fuga de memória de controlo

Aviso: Este artigo foi traduzido automaticamente

Propriedades

ID do Artigo: 813354 - Última Revisão: 01/29/2014 12:26:04 - 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