清除WP8中Page使用的内存

本文关键字:内存 Page WP8 清除 | 更新日期: 2023-09-27 18:20:44

我创建了一个小游戏(只是通过xaml,而不是xna),这个游戏有4个xaml页面:MainPage、ChoseLevelPage、PlayingPage和ScorePage我第一次玩游戏时,游戏运行得很顺利(从主页->选择级别页面->播放页面导航)当关卡结束时,它从播放页面->记分页面->主页导航

但当我第二次选择关卡和游戏时(主页->选择关卡页面->播放页面),动作选择关卡(从选择关卡页面->播放页面)需要很长时间,而且播放页面中的游戏也非常滞后,有时会导致我的应用崩溃

我的播放页面包含一个MediaElement(级别的播放歌曲)、一个DispatcherTimer(级别的关闭时间)和一个StoryBoard,每2秒后重复一次(级别的每个回合)

在OnNavigatedFrom事件中,我将媒体元素和故事板设置为停止,但我只是不知道它们是否从内存中清除(以及我在PlayingPage中使用的其他资源)?

void dispatcherTimer1_Tick(object sender, EventArgs e)
    {
        if (time > 0)     // this variable cout the time left, decreased by 1 second
        {                
            time --;
        }            
        else              // when "time" =0, stop the level and navigate to ScorePage
        {
            dispatcherTimer1.Stop();         // stop the dispatcher          
            NavigationService.Navigate(new Uri("/Pages/ScorePage.xaml", UriKind.Relative));
        }
    }    
protected override void OnNavigatedFrom(NavigationEventArgs e)
    {
        myStoryboard.Stop();                    // stop the story board
        meSong.Stop();                          // stop the mediaelement
        App.MyModel.PlayingSong = null;         // set source of the medialement to null
        base.OnNavigatedFrom(e);
    }

清除WP8中Page使用的内存

当您返回MainPage时,请确保清除后堆栈,否则您以前的PlayingPage实例将保留在内存中,这可能解释了您面临的问题。

您可以通过一个简单的循环清除后台,最好是在MainPage:的OnNavigatedTo事件中

while (this.NavigationService.BackStack.Any())
{
   this.NavigationService.RemoveBackEntry();
}