页面导航和在后台运行

时间:2017-01-29 18:45:54

标签: c# uwp

在UWP(XAML / C#)中,我使用Frame.Navigate(typeof(Page2));,在Page2的C#中我使用计时器,当我使用Frame.GoBack();时,框架确实会返回,但是计时器没有停止 - 我表示页面及其所有组件仍然在后台运行,因此应用程序占用了太多RAM。我如何“杀死”该页面?

注意:如果用户使用此导航10次,则该页面在后台运行10次并且很糟糕。

1 个答案:

答案 0 :(得分:1)

重要的是要了解CLR垃圾收集器是谁负责杀死"未使用的物体一个对象(以及它的所有成员)变为"未使用"当它不再被引用时。

当您启动Windows.UI.Xaml.DispatcherTimer时,它会将自身添加到当前Dispatcher内的计时器集合中,从而在Dispatcher和计时器之间创建直接引用。反过来,计时器保存对其运行页面的引用。由于Dispatcher是一个全局对象,它将使您的页面保持活动状态,直到计时器停止。

内存泄漏可能还有其他原因(这是一个非常广泛的主题),包括:

  • 直接或间接引用您网页的其他来源;
  • 订阅静态事件;
  • 复杂数据绑定,例如{Binding Path=Property.Subproperty};

如果上述方法没有帮助,我建议您使用内存分析器查找内存泄漏,例如Visual Studio 2015中包含的诊断工具。