2009-03-09 5 views
5

Bir uygulama düzeyi kaynağına başvurmak için bir DynamicResource kullanmak, bellek sızıntılarının oluşmasına neden olabilir.DynamicResource'ın bir Uygulama Seviyesi Kaynağına Kullanımı Sızıntılara Neden Olabilir

Daha fazla bilgi, nasıl yeniden üretileceği ve bazı geçici çözümler için lütfen bu WPF forumu post'a bakın.

Soruma sorum: başka birisinin sorunu var mı? Eğer öyleyse, bu konuda nasıl çalıştın? Bu arada

, orada bu kaçak oluşmaz birçok durum gibi görünüyor ve belki en iyi soru: tam olarak bu sızıntısı oluşur ve oluşmaz durumlar nelerdir?

App.xaml

<Application 
    x:Class="WeakReferences.App" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    StartupUri="Window1.xaml" 
> 
    <Application.Resources> 
     <SolidColorBrush x:Key="MyBrush" Color="SkyBlue"/> 
    </Application.Resources> 
</Application> 

Window1.xaml

<Window 
    x:Class="WeakReferences.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" 
> 
    <Grid> 
     <Button 
      Name="ReleaseButton" 
      Content="Release Reference" 
      Click="Button_Click" 
     /> 
    </Grid> 
</Window> 

Window1.xaml.cs

: Burada kolaylık sağlamak için

olarak tekrar verir koddur

public partial class Window1 : Window 
{ 
    object p; 

    public Window1() 
    { 
     InitializeComponent(); 

     p = new Page1(); 
    } 

    private void Button_Click(object sender, RoutedEventArgs e) 
    {    
     p = null; 

     GC.Collect(); 
    } 
} 

Page1.xaml

<Page 
    x:Class="WeakReferences.Page1" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    Title="Page1" 
    Background="{DynamicResource MyBrush}" 
> 
    <Grid> 
    </Grid> 
</Page> 

Page1.xaml.cs

public partial class Page1 : Page 
{ 
    public Page1() 
    { 
     InitializeComponent(); 
    } 

    ~Page1() 
    { 
     Trace.TraceInformation("Page1 Finalized."); 
    } 
} 

cevap

4

Microsoft bu bir hata olduğunu confirmed vardır ve .NET 4.0 giderilmiştir dikkat. Bir uygulama düzeyinde kaynak başvurmak için DynamicResource kullanıyor nesne ... görsel ağacının parçası haline asla eğer

Bildiğim kadarıyla söyleyebilirim, bu hata sadece yeniden üretir. Buna karşı bazı kanıtları görmeyi çok isterim ... ya da bu sızıntının ne zaman gerçekleşeceğine dair daha fazla açıklama.

Güncelleme: Bu hata ayrıca .NET 3.5 ile giderilmiştir. Daha fazla bilgi için bu sıcak fix'a bakın.

İlgili konular