creato una semplice applicazione che perdite di memoria:Come forzare Universal Application a rilasciare memoria?
View
<Page
...
x:Class="App3.MainPage"
mc:Ignorable="d">
<StackPanel>
<Image Width="300" Height="200"
Source="/Assets/BBlHOiv.jpg"></Image>
<Button Click="Button_Click">Navigate</Button>
</StackPanel>
</Page>
Codice Dietro
public sealed partial class MainPage : Page
{
public MainPage()
{
this.InitializeComponent();
}
private void Button_Click(object sender, Windows.UI.Xaml.RoutedEventArgs e)
{
this.Frame.Navigate(typeof(MainPage));
}
Ogni volta che il pulsante viene premuto, il codice accede alla stessa pagina, che ha un'immagine su di esso ~ 400 KB. Se continuo a fare clic sul pulsante ad un ritmo veloce, la memoria aumenta ogni clic o sempre pochi clic. La memoria non viene recuperata, o almeno non in modo tempestivo. In un'app reale, con pagine più complesse e una navigazione più complessa (inclusa la navigazione circolare), questo può diventare un grosso problema. La domanda è, come forzare l'app a rilasciare la memoria? Idealmente, una volta che una pagina non è più necessaria/mostrata.
Ho provato le seguenti cose senza fortuna.
# 1 Cancellazione stack di spostamento del telaio
protected override void OnNavigatedFrom(NavigationEventArgs e)
{
base.OnNavigatedFrom(e);
this.Frame.BackStack.Clear();
}
# 2 Quando si utilizza MVVM, impostando il DataContext su null (ove DataContext sorge nel markup XAML)
protected override void OnNavigatedFrom(NavigationEventArgs e)
{
base.OnNavigatedFrom(e);
this.DataContext = null;
this.Frame.BackStack.Clear();
}