Update: Tritt Speicherverlust in einer WPF-Anwendung auf, wenn ein Brush-Objekt verwiesen wird, mithilfe einer DynamicResource

SPRACHE AUSWÄHLEN SPRACHE AUSWÄHLEN
Artikel-ID: 2651992 - Produkte anzeigen, auf die sich dieser Artikel bezieht
Alles erweitern | Alles schließen

Auf dieser Seite

Problembeschreibung

Betrachten Sie das folgende Szenario:
  • Erstellen Sie eine Microsoft Windows Presentation Foundation (WPF)-Anwendung, die Ziel von Microsoft.NET Framework 3.0 oder Microsoft.NET Framework 3.5.
  • Die Anwendung definiert ein Brush-Objekt und ein Color-Objekt in der XAML-Datei der Anwendung.
    • Das Brush-Objekt verwendet eine DynamicResource Color-Objekt zu verweisen. Zum Beispiel
      <Application.Resources>
      
      <Color x:Key="color1">#ff4050ff</Color>
      
      <SolidColorBrush x:Key="brush1" Color="{DynamicResource color1}"/>
      
      </Application.Resources>
    • Das Brush-Objekt verwiesen wird, als ein DynamicResource in einem WPF-Fenster oder ein Benutzersteuerelement oder ein anderes Objekt. Zum Beispiel
      <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>
  • Sie öffnen oder Schließen Sie die Instanzen des Fensters oder das Benutzersteuerelement.

In diesem Szenario sind Instanzen der Heap der Garbage Collection (GC) als Stamm und nicht freigegeben. Im Laufe der Zeit tritt ein Speicherverlust mehr und mehr Instanzen des Fensters oder das Benutzersteuerelement erstellt werden. Schließlich erhalten Sie eine System.OutOfMemoryException Ausnahme.

Hinweis Dieses Problem tritt nicht auf, wenn die Anwendung Microsoft richtet.NET Framework 4.

Ursache

Dieses Problem tritt auf, weil einen interner Ereignishandler Drähte, die WPF-Run-Time die ResourceReferenceExpressionObjekt, das die Ressource zugeordnet ist, die das Fenster oder das Benutzersteuerelement verwendet wird. Diese Ereignis-Handler-Referenz wird nicht entfernt, wenn das Fenster oder das Benutzersteuerelement geschlossen und auf Null gesetzt ist.

Lösung

Hotfix-Informationen

Ein unterstützter Hotfix ist jetzt von Microsoft erhältlich. Es soll jedoch nur das Problem zu beheben, das in diesem Artikel beschreibt. Installieren Sie es, nur auf Systemen, bei die dieses spezielle Problem auftritt.

Um dieses Problem zu beheben, wenden Sie sich an Microsoft Support Services, um den Hotfix zu erhalten. Eine vollständige Liste der Microsoft Product Support Services Telefonnummern und Informationen über Supportkosten finden Sie auf die folgende Microsoft-Website:
http://support.Microsoft.com/contactus/?WS=Support
Hinweis In besonderen Fällen können Gebühren, die normalerweise für Support-Anrufe anfallen abgebrochen werden, wenn ein Microsoft-Supportmitarbeiter feststellt, dass ein bestimmtes Update Ihr Problem beheben kann. Die normalen Supportkosten gilt für zusätzliche Supportfragen und Probleme, die für das betreffende Update nicht qualifizieren.

Voraussetzungen

Um diesen Hotfix anwenden zu können, müssen Sie die Microsoft.NET Framework 3.5.1 installiert auf einem Computer, der eines der folgenden Betriebssysteme ausgeführt wird:
  • Windows 7 Servicepack 1 (SP1)
  • Windows Server 2008 R2 Servicepack 1 (SP1)


Neustart erforderlich ist.

Sie müssen den Computer neu starten, nachdem Sie diesen Hotfix anwenden, wenn die betroffenen Dateien verwendet werden.

Dateiinformationen

Die internationale Version dieses Hotfixes besitzt die Dateiattribute (oder höher), die in der folgenden Tabelle aufgelistet sind. Die Datums- und Uhrzeitangaben für diese Dateien sind in Coordinated Universal Time (UTC) aufgelistet. Wenn Sie die Dateiinformationen anzeigen, wird es in die lokale Ortszeit konvertiert. Um die Differenz zwischen UTC und der Ortszeit zu ermitteln, verwenden die Zeitzone auf die Registerkarte der Datum und Uhrzeit Element in der Systemsteuerung.

Foder alle unterstützten x 86-basierten Versionen von Windows 7
Tabelle minimierenTabelle vergrößern
DateinameDateiversionGröße der DateiDatumZeitPlattform
PresentationFramework.dll3.0.6920.57385,283,84016-Dec-201101: 49X 86
WindowsBase.dll3.0.6920.57381.253.37616-Dec-201101: 49X 86
PresentationCore.dll3.0.6920.57384,218,88016-Dec-201101: 49X 86
PresentationFramework.dll3.0.6920.57385,283,84016-Dec-201101: 49X 86
Presentationhostdll.dll3.0.6920.5738131,36016-Dec-201101: 49X 86
PresentationHost.exe4.0.40305.0296,22416-Dec-201101: 49X 86
Presentationhostproxy.dll4.0.31106.0100,13616-Dec-201101: 49X 86
WindowsBase.dll3.0.6920.57381.253.37616-Dec-201101: 49X 86

Foder alle unterstützten x 64-basierten Versionen von Windows 7 und Windows Server 2008-R2
Tabelle minimierenTabelle vergrößern
DateinameDateiversionGröße der DateiDatumZeitPlattform
PresentationCore.dll3.0.6920.57383,998,72016-Dec-201101: 42X 64
PresentationFramework.dll3.0.6920.57384,640,76816-Dec-201101: 42X 86
Presentationhostdll.dll3.0.6920.5738172,32016-Dec-201101: 42X 64
PresentationHost.exe4.0.31106.0321,31216-Dec-201101: 42X 64
Presentationhostproxy.dll4.0.31106.0110,88816-Dec-201101: 42X 64
WindowsBase.dll3.0.6920.57381,114,11216-Dec-201101: 42X 86
PresentationFramework.dll3.0.6920.57385,283,84016-Dec-201101: 49X 86
WindowsBase.dll3.0.6920.57381.253.37616-Dec-201101: 49X 86
PresentationCore.dll3.0.6920.57384,218,88016-Dec-201101: 49X 86
PresentationFramework.dll3.0.6920.57385,283,84016-Dec-201101: 49X 86
Presentationhostdll.dll3.0.6920.5738131,36016-Dec-201101: 49X 86
PresentationHost.exe4.0.40305.0296,22416-Dec-201101: 49X 86
Presentationhostproxy.dll4.0.31106.0100,13616-Dec-201101: 49X 86
WindowsBase.dll3.0.6920.57381.253.37616-Dec-201101: 49X 86



Abhilfe

Um dieses Problem zu umgehen, verwenden Sie eine der folgenden Methoden:
  • Verwendung einerStaticResource Color-Objekt in das Brush-Objekt zu verweisen. Ändern Sie beispielsweise den ersten Teil des Codes in der XAML-Datei, die der folgenden im Abschnitt "Problembeschreibung" erwähnt wird:
    <Color x:Key="color1">#ff4050ff</Color> 
    <SolidColorBrush x:Key="brush1" Color="{StaticResource color1}"></SolidColorBrush>
  • Legen Sie dieX: Shared die Option auf false, wenn die DynamicResource wird verwendet. Ändern Sie beispielsweise den ersten Teil des Codes in der XAML-Datei, die der folgenden im Abschnitt "Problembeschreibung" erwähnt wird:
    <Application.Resources>
            <Color x:Key="color1">#ff4050ff</Color>
            <SolidColorBrush x:Key="brush1" x:Shared="False" Color="{DynamicResource color1}" />
        </Application.Resources>



Informationsquellen

Weitere Informationen zu den DynamicResource Markup-Erweiterung finden Sie auf die folgende MSDN-Website:
Allgemeine Informationen über die DynamicResource-Markuperweiterung
Weitere Informationen zu WPF-Pinsel finden Sie auf die folgende MSDN-Website:
Allgemeine Informationen zu WPF-Pinsel

Status

Microsoft hat bestätigt, dass dieses Problem auf die im Abschnitt "Gilt für" aufgeführten Microsoft-Produkte zutrifft.

Eigenschaften

Artikel-ID: 2651992 - Geändert am: Dienstag, 10. Januar 2012 - Version: 1.0
Die Informationen in diesem Artikel beziehen sich auf:
  • 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
Keywords: 
kbqfe kbhotfixserver kbfix kbexpertiseadvanced kbsurveynew kbmt KB2651992 KbMtde
Maschinell übersetzter Artikel
Wichtig: Dieser Artikel wurde maschinell und nicht von einem Menschen übersetzt. Die Microsoft Knowledge Base ist sehr umfangreich und ihre Inhalte werden ständig ergänzt beziehungsweise überarbeitet. Um Ihnen dennoch alle Inhalte auf Deutsch anbieten zu können, werden viele Artikel nicht von Menschen, sondern von Übersetzungsprogrammen übersetzt, die kontinuierlich optimiert werden. Doch noch sind maschinell übersetzte Texte in der Regel nicht perfekt, insbesondere hinsichtlich Grammatik und des Einsatzes von Fremdwörtern sowie Fachbegriffen. Microsoft übernimmt keine Gewähr für die sprachliche Qualität oder die technische Richtigkeit der Übersetzungen und ist nicht für Probleme haftbar, die direkt oder indirekt durch Übersetzungsfehler oder die Verwendung der übersetzten Inhalte durch Kunden entstehen könnten.
Den englischen Originalartikel können Sie über folgenden Link abrufen: 2651992
Microsoft stellt Ihnen die in der Knowledge Base angebotenen Artikel und Informationen als Service-Leistung zur Verfügung. Microsoft übernimmt keinerlei Gewährleistung dafür, dass die angebotenen Artikel und Informationen auch in Ihrer Einsatzumgebung die erwünschten Ergebnisse erzielen. Die Entscheidung darüber, ob und in welcher Form Sie die angebotenen Artikel und Informationen nutzen, liegt daher allein bei Ihnen. Mit Ausnahme der gesetzlichen Haftung für Vorsatz ist jede Haftung von Microsoft im Zusammenhang mit Ihrer Nutzung dieser Artikel oder Informationen ausgeschlossen.

Ihr Feedback an uns

 

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