2015-08-13 81 views
6

創建了一個簡單的應用程序,泄漏內存:如何強制通用應用程序釋放內存?

查看

<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> 

代碼隱藏

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

每次點擊按鈕時,代碼導航到同一個網頁,其中有一個圖像〜400KB。如果我繼續快速點擊按鈕,每次點擊都會增加內存,或者點擊幾次。內存不被回收,或至少不及時。在一個真正的應用程序,更復雜的頁面和更復雜的導航(包括循環導航),這可能會成爲一個大問題。問題是,如何強制應用程序釋放內存?理想情況下,一旦不再需要/顯示一個頁面。

我試了下面的東西,沒有運氣。

#1清除幀的導航堆棧

protected override void OnNavigatedFrom(NavigationEventArgs e) 
    { 
     base.OnNavigatedFrom(e); 
     this.Frame.BackStack.Clear(); 
    } 

#2使用MVVM,設置在DataContext爲空(當的datacontext在XAML標記被設置)

protected override void OnNavigatedFrom(NavigationEventArgs e) 
    { 
     base.OnNavigatedFrom(e); 
     this.DataContext = null; 
     this.Frame.BackStack.Clear(); 
    } 

回答

相關問題