2015-08-13 11 views
6

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

risposta