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

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
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: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
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
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:
Weitere Informationen zu WPF-Pinsel finden Sie auf die folgende MSDN-Website:
Status
Microsoft hat bestätigt, dass dieses Problem auf die im Abschnitt "Gilt für" aufgeführten Microsoft-Produkte zutrifft.

Warnung: Dieser Artikel wurde automatisch übersetzt.

Eigenschaften

Artikelnummer: 2651992 – Letzte Überarbeitung: 01/10/2012 01:46:00 – Revision: 1.0

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

  • kbqfe kbhotfixserver kbfix kbexpertiseadvanced kbsurveynew kbmt KB2651992 KbMtde
Feedback