CORREÇÃO: O vazamento de memória ocorre em um aplicativo WPF quando é feita referência a um objeto brush usando um DynamicResource

Traduções deste artigo Traduções deste artigo
ID do artigo: 2651992 - 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 Windows Presentation Foundation (WPF) que tem como alvo o Microsoft.NET Framework 3.0 ou o Microsoft.NET Framework 3.5.
  • O aplicativo define um objeto brush e um objeto de cor no arquivo XAML do aplicativo.
    • O objeto brush usa um DynamicResource Para fazer referência ao objeto de cor. Por exemplo,
      <Application.Resources>
      
      <Color x:Key="color1">#ff4050ff</Color>
      
      <SolidColorBrush x:Key="brush1" Color="{DynamicResource color1}"/>
      
      </Application.Resources>
    • O objeto do pincel é referenciado como um DynamicResource em uma janela do WPF ou um controle de usuário ou outro objeto. Por exemplo,
      <Window x:Class="WpfApplication6.Window1"
      
      xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
      
      xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
      
      Title="Window1" Height="300" Width="300" Background="{DynamicResource brush1}">
      
      </Window>
  • Abrir ou fechar as instâncias da janela ou o controle de usuário.

Nesse cenário, instâncias são enraizadas na heap coletado ao lixo (GC) e não liberadas. Ao longo do tempo, um vazamento de memória ocorre à medida que mais e mais instâncias da janela ou o controle de usuário são criadas. Eventualmente, você recebe um System. OutOfMemoryException exceção.

Observação Esse problema não ocorre quando o aplicativo tem como alvo o Microsoft.NET Framework 4.

Causa

Esse problema ocorre porque o tempo de execução do WPF fios um manipulador de eventos interno para o ResourceReferenceExpressionobjeto que está associado com o recurso que a janela ou o controle de usuário está usando. Esta referência de manipulador de evento não é removida quando a janela ou o controle de usuário é fechada e está definida como null.

Resolução

Informações sobre o hotfix

Um hotfix compatível foi disponibilizado pela Microsoft. No entanto, destina-se a corrigir o problema descrito neste artigo. Se aplicam somente aos sistemas que apresentarem esse problema específico.

Para resolver esse problema, entre em contato com o Atendimento Microsoft para obter o hotfix. Para obter uma lista completa de números de telefone do Atendimento Microsoft e informações sobre os custos de suporte, visite o seguinte site da Microsoft:
http://support.microsoft.com/contactus/?ws=support
Observação Em alguns casos, taxas cobradas pelas ligações para o suporte podem ser canceladas se um profissional de suporte da Microsoft determinar que uma atualização específica resolverá o problema. Os custos de suporte normais serão aplicados a questões de suporte adicional e problemas que não se qualificam à atualização específica em questão.

Pré-requisitos

Para aplicar esse hotfix, você deve ter o Microsoft.NET Framework 3.5.1 instalado em um computador que esteja executando um dos seguintes sistemas operacionais:
  • O Windows 7 Service Pack 1 (SP1)
  • Windows Server 2008 R2 Service Pack 1 (SP1)


Requisito de reinicialização

Você deve reiniciar o computador após aplicar esse hotfix se os arquivos afetados estão sendo usados.

Informações sobre o arquivo

A versão global deste hotfix apresenta os atributos de arquivo (ou atributos de arquivo posteriores) listados na tabela a seguir. As datas e horas destes arquivos estão listadas no tempo Universal Coordenado (UTC). Quando você visualiza as informações do arquivo, ele será convertido para a hora local. Para saber a diferença entre o UTC e a hora local, use o Fuso horário Guia de Data e hora item no painel de controle.

Fou há suporte para todas as versões baseadas em x86 do Windows 7
Recolher esta tabelaExpandir esta tabela
Nome do arquivoVersão do arquivoTamanho do arquivoDataTempoPlataforma
PresentationFramework.dll3.0.6920.57385,283,84016-Dez-201101: 49x86
WindowsBase. dll3.0.6920.57381,253,37616-Dez-201101: 49x86
PresentationCore. dll3.0.6920.57384,218,88016-Dez-201101: 49x86
PresentationFramework.dll3.0.6920.57385,283,84016-Dez-201101: 49x86
Presentationhostdll.dll3.0.6920.5738131,36016-Dez-201101: 49x86
Presentationhost.exe4.0.40305.0296,22416-Dez-201101: 49x86
Presentationhostproxy.dll4.0.31106.0100,13616-Dez-201101: 49x86
WindowsBase. dll3.0.6920.57381,253,37616-Dez-201101: 49x86

Fou há suporte para todas as versões baseadas em x64 do Windows 7 e do Windows Server 2008 R2
Recolher esta tabelaExpandir esta tabela
Nome do arquivoVersão do arquivoTamanho do arquivoDataTempoPlataforma
PresentationCore. dll3.0.6920.57383,998,72016-Dez-201101: 42x64
PresentationFramework.dll3.0.6920.57384,640,76816-Dez-201101: 42x86
Presentationhostdll.dll3.0.6920.5738172,32016-Dez-201101: 42x64
Presentationhost.exe4.0.31106.0321,31216-Dez-201101: 42x64
Presentationhostproxy.dll4.0.31106.0110,88816-Dez-201101: 42x64
WindowsBase. dll3.0.6920.57381,114,11216-Dez-201101: 42x86
PresentationFramework.dll3.0.6920.57385,283,84016-Dez-201101: 49x86
WindowsBase. dll3.0.6920.57381,253,37616-Dez-201101: 49x86
PresentationCore. dll3.0.6920.57384,218,88016-Dez-201101: 49x86
PresentationFramework.dll3.0.6920.57385,283,84016-Dez-201101: 49x86
Presentationhostdll.dll3.0.6920.5738131,36016-Dez-201101: 49x86
Presentationhost.exe4.0.40305.0296,22416-Dez-201101: 49x86
Presentationhostproxy.dll4.0.31106.0100,13616-Dez-201101: 49x86
WindowsBase. dll3.0.6920.57381,253,37616-Dez-201101: 49x86



Como Contornar

Para contornar esse problema, use um dos seguintes métodos:
  • Use umStaticResource para consultar o objeto de cor no objeto de pincel. Por exemplo, altere a primeira parte do código no arquivo XAML que é mencionado na seção "Sintomas" para o seguinte:
    <Color x:Key="color1">#ff4050ff</Color> 
    <SolidColorBrush x:Key="brush1" Color="{StaticResource color1}"></SolidColorBrush>
  • Definir ox: compartilhados opção para falso se o DynamicResource é usado. Por exemplo, altere a primeira parte do código no arquivo XAML que é mencionado na seção "Sintomas" para o seguinte:
    <Application.Resources>
            <Color x:Key="color1">#ff4050ff</Color>
            <SolidColorBrush x:Key="brush1" x:Shared="False" Color="{DynamicResource color1}" />
        </Application.Resources>



Referências

Para obter mais informações sobre o DynamicResource extensão de marcação, visite o seguinte site da MSDN:
Informações gerais sobre a extensão de marcação DynamicResource
Para obter mais informações sobre o WPF pincéis, visite o seguinte site da MSDN:
Informações gerais sobre o WPF pincéis

Situação

A Microsoft confirmou que esse é um problema nos produtos da Microsoft listados na seção "Aplica-se a".

Propriedades

ID do artigo: 2651992 - Última revisão: terça-feira, 10 de janeiro de 2012 - Revisão: 1.0
A informação contida neste artigo aplica-se a:
  • Microsoft .NET Framework 3.0
  • Microsoft .NET Framework 3.0 Service Pack 1
  • Microsoft .NET Framework 3.0 Service Pack 2
  • Microsoft .NET Framework 3.5
  • Microsoft .NET Framework 3.5 Service Pack 1
Palavras-chave: 
kbqfe kbhotfixserver kbfix kbexpertiseadvanced kbsurveynew kbmt KB2651992 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: 2651992

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