Il semble que l'utilisation d'une ressource DynamicResource pour faire référence à une ressource de niveau application peut provoquer des fuites de mémoire.L'utilisation de DynamicResource pour une ressource au niveau de l'application peut provoquer des fuites
S'il vous plaît voir ce forum WPF post pour plus d'informations, comment le reproduire, et quelques solutions de contournement.
Ma question est la suivante: y a-t-il quelqu'un d'autre? Si oui, comment avez-vous travaillé autour de cela? Par ailleurs, il semble y avoir beaucoup de situations où cette fuite ne se produit pas, et peut-être la meilleure question est: quelles sont exactement les situations où cette fuite se produit et ne se produit pas?
Pour plus de commodité est ici le code qui reproduit:
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();
}
}
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.");
}
}