FIX: Geheugenlek in een WPF toepassing wanneer een brush-object wordt verwezen met een DynamicResource

BELANGRIJK: Dit artikel is vertaald door de vertaalmachine software van Microsoft in plaats van door een professionele vertaler. Microsoft biedt u professioneel vertaalde artikelen en artikelen vertaald door de vertaalmachine, zodat u toegang heeft tot al onze knowledge base artikelen in uw eigen taal. Artikelen vertaald door de vertaalmachine zijn niet altijd perfect vertaald. Deze artikelen kunnen fouten bevatten in de vocabulaire, zinsopbouw en grammatica en kunnen lijken op hoe een anderstalige de taal spreekt en schrijft. Microsoft is niet verantwoordelijk voor onnauwkeurigheden, fouten en schade ontstaan door een incorrecte vertaling van de content of het gebruik ervan door onze klanten. Microsoft past continue de kwaliteit van de vertaalmachine software aan door deze te updaten.

De Engelstalige versie van dit artikel is de volgende:2651992
Symptomen
Het volgende scenario:
  • U Windows Presentation Foundation (WPF) toepassing maken die Microsoft doelen.NET Framework 3.0 of Microsoft.NET Framework 3.5.
  • De toepassing definieert een brush-object en een object kleur in de XAML bestand van de toepassing.
    • Het object penseel gebruikt een DynamicResource Als u verwijst naar de color-object. Bijvoorbeeld:
      <Application.Resources><Color x:Key="color1">#ff4050ff</Color><SolidColorBrush x:Key="brush1" Color="{DynamicResource color1}"/></Application.Resources>
    • De brush-object wordt verwezen als een DynamicResource in een venster WPF of een besturingselement of een ander object. Bijvoorbeeld:
      <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>
  • U opent of sluit de exemplaren van het venster of het besturingselement.

In dit scenario worden exemplaren van de heap (GC) garbagecollection zijn verzameld en niet vrijgegeven. Na verloop van tijd treedt een geheugenlek op meer en meer exemplaren van het venster of het gebruikersbesturingselement voor de zijn gemaakt. Uiteindelijk ontvangt u een System.OutOfMemoryException uitzondering.

Opmerking Dit probleem treedt niet op wanneer de toepassing Microsoft doelen..NET Framework 4.

Oorzaak
Dit probleem treedt op omdat de WPF runtime-kabels een interne gebeurtenis-handler de ResourceReferenceExpressioneen object dat is gekoppeld aan de resource die het venster of het besturingselement wordt gebruikt. Deze gebeurtenis-handler verwijzing wordt niet verwijderd wanneer het venster of het besturingselement gesloten en ingesteld op null is.
Oplossing

Informatie over hotfixes

Een ondersteunde hotfix is nu beschikbaar bij Microsoft. Het is echter bedoeld om alleen het probleem dat in dit artikel wordt beschreven. Deze alleen van toepassing op systemen waarop dit specifieke probleem.

Dit probleem kunt oplossen, kunt u contact opnemen met Microsoft Customer Support Services om de hotfix te verkrijgen. Een volledige lijst met telefoonnummers van Microsoft Customer Support Services en informatie over kosten van ondersteuning vindt u op de volgende Microsoft-website:Opmerking In speciale gevallen kunnen kosten die normaal verbonden worden geannuleerd als een medewerker van Microsoft Productondersteuning bepaalt dat een specifieke update de oplossing van uw probleem. De gebruikelijke ondersteuningskosten gelden voor extra ondersteuningsvragen die niet in aanmerking voor de specifieke update in kwestie komen.

Vereisten

Deze hotfix moet u Microsoft.NET Framework 3.5.1 op een computer waarop een van de volgende besturingssystemen is geïnstalleerd:
  • Windows 7 servicepack 1 (SP1)
  • Servicepack 1 (SP1) voor Windows Server 2008 R2


Opnieuw opstarten

U moet de computer opnieuw opstarten nadat u deze hotfix als de bestanden worden gebruikt.

Informatie over

De algemene versie van deze hotfix heeft de bestandskenmerken (of recentere bestandskenmerken) die in de volgende tabel worden weergegeven. De datums en tijden voor deze bestanden worden weergegeven in UTC (Coordinated Universal Time). Wanneer u de bestandsinformatie weergeeft, wordt deze naar lokale tijd geconverteerd. Het verschil tussen UTC en lokale tijd, gebruikt de Tijdzone tabblad in de Datum en tijd een item in het Configuratiescherm.

Fof alle ondersteunde x 86-versies van Windows 7
BestandsnaamBestandsversieBestandsgrootteDatumTijdPlatform
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

Fof alle ondersteunde x 64-versies van Windows 7 en Windows Server 2008 R2
BestandsnaamBestandsversieBestandsgrootteDatumTijdPlatform
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



Workaround
Dit probleem wilt omzeilen, gebruikt u een van de volgende methoden:
  • Gebruik eenStaticResource Als u verwijst naar de color-object in de brush-object. Wijzig bijvoorbeeld het eerste deel van de code in de XAML-bestand dat wordt vermeld in de sectie 'Symptomen' de volgende:
    <Color x:Key="color1">#ff4050ff</Color> <SolidColorBrush x:Key="brush1" Color="{StaticResource color1}"></SolidColorBrush>
  • Stel dex: gedeelde false als optie de DynamicResource wordt gebruikt. Wijzig bijvoorbeeld het eerste deel van de code in de XAML-bestand dat wordt vermeld in de sectie 'Symptomen' de volgende:
    <Application.Resources>        <Color x:Key="color1">#ff4050ff</Color>        <SolidColorBrush x:Key="brush1" x:Shared="False" Color="{DynamicResource color1}" />    </Application.Resources>



Referenties
Voor meer informatie over de DynamicResource Markup-extensie, Ga naar de volgende MSDN-website:
Ga naar de volgende MSDN-website voor meer informatie over WPF penselen:
Status
Microsoft heeft bevestigd dat dit een probleem is in de Microsoft-producten die worden vermeld in de sectie 'Van toepassing op'.

Waarschuwing: dit artikel is automatisch vertaald

Egenskaper

Artikkel-ID: 2651992 – Forrige gjennomgang: 01/10/2012 01:51:00 – Revisjon: 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 KbMtnl
Tilbakemelding