清除WP8中Page使用的内存

时间:2014-09-04 03:14:49

标签: c# xaml windows-phone-8

我创建了一个小游戏(仅限xaml,而不是xna),这个游戏有4个xaml页面:MainPage,ChoseLevelPage,PlayingPage和ScorePage 我第一次玩游戏时,游戏运行顺畅(从MainPage导航 - > ChoseLevelPage - > PlayingPage) 当关卡完成后,它从PlayingPage导航 - > scorePage - >的MainPage

但是我第二次选择了一个级别并且玩(MainPage - > ChoseLevelPage - > PlayingPage),动作选择级别(来自ChoseLevelPage - > PlayingPage)需要这么长时间,并且在PlayingPage中的游戏玩法也非常滞后,有时候崩溃了我的应用

我的PlayingPage包含一个MediaElement(级别的播放歌曲),DispatcherTimer(降低关卡时间),以及每2秒后重复一次的StoryBoard(每个转弯级别)

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

1 个答案:

答案 0 :(得分:1)

当您返回MainPage时,请务必清除后台,否则您之前的PlayingPage实例将保留在内存中,可能会解释您所面临的问题。

您可以使用简单的循环清除backstack,最好是在MainPage的OnNavigatedTo事件中:

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