FIX: Perdita di memoria in un'applicazione WPF quando un oggetto brush viene fatto riferimento tramite un DynamicResource

Traduzione articoli Traduzione articoli
Identificativo articolo: 2651992 - Visualizza i prodotti a cui si riferisce l?articolo.
Espandi tutto | Chiudi tutto

In questa pagina

Sintomi

Si consideri il seguente scenario:
  • Creazione di un'applicazione Microsoft Windows Presentation Foundation (WPF) destinato a Microsoft.NET Framework 3.0 o Microsoft.NET Framework 3.5.
  • L'applicazione definisce un oggetto brush e un oggetto di colore nel file XAML dell'applicazione.
    • L'oggetto brush utilizza un DynamicResource Per fare riferimento all'oggetto di colore. Ad esempio,
      <Application.Resources>
      
      <Color x:Key="color1">#ff4050ff</Color>
      
      <SolidColorBrush x:Key="brush1" Color="{DynamicResource color1}"/>
      
      </Application.Resources>
    • L'oggetto brush viene fatto riferimento come un DynamicResource in una finestra WPF o un controllo utente o un altro oggetto. Ad esempio,
      <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>
  • Si apre o si chiude le istanze della finestra o il controllo utente.

In questo scenario, le istanze sono contiene una radice nell'heap (GC) sottoposto a garbage collection e non rilasciate. Nel tempo, si verifica una perdita di memoria quando vengono create più istanze della finestra o il controllo utente. Infine, viene visualizzato un System. OutOfMemoryException eccezione.

Nota Questo problema si verifica quando l'applicazione ha come destinazione di Microsoft.NET Framework 4.

Cause

Questo problema si verifica perché il run-time WPF cavi un gestore di eventi interni per il ResourceReferenceExpressionoggetto associato alla risorsa che utilizza la finestra o il controllo utente. Questo riferimento al gestore eventi non viene rimossa quando la finestra o il controllo utente viene chiuso e impostato su null.

Risoluzione

Informazioni sull'hotfix

Un hotfix supportato è disponibile da Microsoft. Tuttavia, esso è destinato esclusivamente alla risoluzione del problema descritto in questo articolo. Applicarlo solo ai sistemi in cui si verificano questo problema specifico.

Per risolvere questo problema, contattare il servizio di supporto tecnico clienti Microsoft per ottenere l'hotfix. Per un elenco completo dei numeri di telefono del servizio di supporto tecnico clienti Microsoft e informazioni sui costi dell'assistenza, visitare il seguente sito Web Microsoft:
http://support.microsoft.com/contactus/?ws=support
Nota In casi particolari, le spese normalmente addebitate per le chiamate al servizio supporto tecnico clienti Microsoft potrebbero essere annullate qualora un addetto del supporto tecnico Microsoft determina che uno specifico aggiornamento risolverà il problema. I costi di supporto usuali verranno applicati per eventuali ulteriori domande e problemi che non dovessero rientrare nello specifico aggiornamento in questione.

Prerequisiti

Per applicare questo hotfix, è necessario disporre di Microsoft.NET Framework 3.5.1 installato su un computer che esegue uno dei seguenti sistemi operativi:
  • Windows 7 Service Pack 1 (SP1)
  • Windows Server 2008 R2 Service Pack 1 (SP1)


Richiesta di riavvio

Dopo aver applicato questo hotfix Se vengono utilizzati i file interessati, è necessario riavviare il computer.

Informazioni sui file

La versione globale di questo hotfix presenta gli attributi di file (o attributi successivi) elencati nella tabella riportata di seguito. Le date e ore dei file elencate nel tempo universale coordinato (UTC). Quando si visualizzano le informazioni del file, viene convertita in ora locale. Per calcolare la differenza tra ora UTC e l'ora locale, utilizzare il Fuso orario scheda di Data e ora elemento nel Pannello di controllo.

Fo tutte supportate le versioni basate su x86 di Windows 7
Riduci questa tabellaEspandi questa tabella
Nome del fileVersione del fileDimensione del fileDataOraPiattaforma
PresentationFramework.dll3.0.6920.57385,283,84016-Dic-201101: 49x86
WindowsBase. dll3.0.6920.57381.253.37616-Dic-201101: 49x86
PresentationCore. dll3.0.6920.57384,218,88016-Dic-201101: 49x86
PresentationFramework.dll3.0.6920.57385,283,84016-Dic-201101: 49x86
Presentationhostdll.dll3.0.6920.5738131,36016-Dic-201101: 49x86
PresentationHost. exe4.0.40305.0296,22416-Dic-201101: 49x86
Presentationhostproxy.dll4.0.31106.0100,13616-Dic-201101: 49x86
WindowsBase. dll3.0.6920.57381.253.37616-Dic-201101: 49x86

Fo tutte supportate le versioni basate su x64 di Windows 7 e di Windows Server 2008 R2
Riduci questa tabellaEspandi questa tabella
Nome del fileVersione del fileDimensione del fileDataOraPiattaforma
PresentationCore. dll3.0.6920.57383,998,72016-Dic-201101: 42x64
PresentationFramework.dll3.0.6920.57384,640,76816-Dic-201101: 42x86
Presentationhostdll.dll3.0.6920.5738172,32016-Dic-201101: 42x64
PresentationHost. exe4.0.31106.0321,31216-Dic-201101: 42x64
Presentationhostproxy.dll4.0.31106.0110,88816-Dic-201101: 42x64
WindowsBase. dll3.0.6920.57381,114,11216-Dic-201101: 42x86
PresentationFramework.dll3.0.6920.57385,283,84016-Dic-201101: 49x86
WindowsBase. dll3.0.6920.57381.253.37616-Dic-201101: 49x86
PresentationCore. dll3.0.6920.57384,218,88016-Dic-201101: 49x86
PresentationFramework.dll3.0.6920.57385,283,84016-Dic-201101: 49x86
Presentationhostdll.dll3.0.6920.5738131,36016-Dic-201101: 49x86
PresentationHost. exe4.0.40305.0296,22416-Dic-201101: 49x86
Presentationhostproxy.dll4.0.31106.0100,13616-Dic-201101: 49x86
WindowsBase. dll3.0.6920.57381.253.37616-Dic-201101: 49x86



Workaround

Per aggirare questo problema, utilizzare uno dei seguenti metodi:
  • Utilizzare unStaticResource Per fare riferimento all'oggetto di colore dell'oggetto brush. Ad esempio, modificare la prima parte del codice nel file di codice XAML riportato nella sezione "Sintomi" al seguente:
    <Color x:Key="color1">#ff4050ff</Color> 
    <SolidColorBrush x:Key="brush1" Color="{StaticResource color1}"></SolidColorBrush>
  • Impostare ilx: condivisi opzione per false se il DynamicResource viene utilizzato. Ad esempio, modificare la prima parte del codice nel file di codice XAML riportato nella sezione "Sintomi" al seguente:
    <Application.Resources>
            <Color x:Key="color1">#ff4050ff</Color>
            <SolidColorBrush x:Key="brush1" x:Shared="False" Color="{DynamicResource color1}" />
        </Application.Resources>



Riferimenti

Per ulteriori informazioni sui DynamicResource estensione di markup, visitare il seguente sito Web MSDN:
Informazioni generali sull'estensione di markup DynamicResource
Per ulteriori informazioni sui pennelli WPF, visitare il seguente sito Web MSDN:
Informazioni generali sui pennelli WPF

Status

Microsoft ha confermato che si tratta di un problema con i prodotti elencati nella sezione "Si applica a".

Proprietà

Identificativo articolo: 2651992 - Ultima modifica: martedì 10 gennaio 2012 - Revisione: 1.0
Le informazioni in questo articolo si applicano 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
Chiavi: 
kbqfe kbhotfixserver kbfix kbexpertiseadvanced kbsurveynew kbmt KB2651992 KbMtit
Traduzione automatica articoli
Il presente articolo è stato tradotto tramite il software di traduzione automatica di Microsoft e non da una persona. Microsoft offre sia articoli tradotti da persone fisiche sia articoli tradotti automaticamente da un software, in modo da rendere disponibili tutti gli articoli presenti nella nostra Knowledge Base nella lingua madre dell?utente. Tuttavia, un articolo tradotto in modo automatico non è sempre perfetto. Potrebbe contenere errori di sintassi, di grammatica o di utilizzo dei vocaboli, più o meno allo stesso modo di come una persona straniera potrebbe commettere degli errori parlando una lingua che non è la sua. Microsoft non è responsabile di alcuna imprecisione, errore o danno cagionato da qualsiasi traduzione non corretta dei contenuti o dell?utilizzo degli stessi fatto dai propri clienti. Microsoft, inoltre, aggiorna frequentemente il software di traduzione automatica.
Clicca qui per visualizzare la versione originale in inglese dell?articolo: 2651992
LE INFORMAZIONI CONTENUTE NELLA MICROSOFT KNOWLEDGE BASE SONO FORNITE SENZA GARANZIA DI ALCUN TIPO, IMPLICITA OD ESPLICITA, COMPRESA QUELLA RIGUARDO ALLA COMMERCIALIZZAZIONE E/O COMPATIBILITA' IN IMPIEGHI PARTICOLARI. L'UTENTE SI ASSUME L'INTERA RESPONSABILITA' PER L'UTILIZZO DI QUESTE INFORMAZIONI. IN NESSUN CASO MICROSOFT CORPORATION E I SUOI FORNITORI SI RENDONO RESPONSABILI PER DANNI DIRETTI, INDIRETTI O ACCIDENTALI CHE POSSANO PROVOCARE PERDITA DI DENARO O DI DATI, ANCHE SE MICROSOFT O I SUOI FORNITORI FOSSERO STATI AVVISATI. IL DOCUMENTO PUO' ESSERE COPIATO E DISTRIBUITO ALLE SEGUENTI CONDIZIONI: 1) IL TESTO DEVE ESSERE COPIATO INTEGRALMENTE E TUTTE LE PAGINE DEVONO ESSERE INCLUSE. 2) I PROGRAMMI SE PRESENTI, DEVONO ESSERE COPIATI SENZA MODIFICHE, 3) IL DOCUMENTO DEVE ESSERE DISTRIBUITO INTERAMENTE IN OGNI SUA PARTE. 4) IL DOCUMENTO NON PUO' ESSERE DISTRIBUITO A SCOPO DI LUCRO.

Invia suggerimenti

 

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