簡體   English   中英

將 DynamicResource 用於應用程序級資源可能會導致泄漏

[英]Usage of DynamicResource to an Application Level Resource Can Cause Leaks

似乎使用 DynamicResource 來引用應用程序級資源會導致發生 memory 泄漏。

請參閱此 WPF 論壇帖子以獲取更多信息、如何重現它以及一些解決方法。

我的問題是:還有其他人遇到過嗎? 如果是這樣,你是如何解決它的?

順便說一句,似乎有很多情況不會發生這種泄漏,也許最好的問題是:這種泄漏發生和不發生的情況到底是什么?

為方便起見,這里是重現它的代碼:

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

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();
    }
}

第1頁.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>

第1頁.xaml.cs

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

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

Microsoft 已確認這是一個錯誤,並且已在 .NET 4.0 中修復。

據我所知,只有在使用 DynamicResource 來引用應用程序級資源的 object 從未成為可視化樹的一部分時,才會重現此錯誤。 希望看到一些相反的證據……或者進一步澄清這種泄漏何時發生。

更新:此錯誤也已在 .NET 3.5 中修復。 有關詳細信息,請參閱此修補程序

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM