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