在UWP(XAML / C#)中,我使用Frame.Navigate(typeof(Page2));
,在Page2的C#中我使用计时器,当我使用Frame.GoBack();
时,框架确实会返回,但是计时器没有停止 - 我表示页面及其所有组件仍然在后台运行,因此应用程序占用了太多RAM。我如何“杀死”该页面?
注意:如果用户使用此导航10次,则该页面在后台运行10次并且很糟糕。
答案 0 :(得分:1)
重要的是要了解CLR垃圾收集器是谁负责杀死"未使用的物体一个对象(以及它的所有成员)变为"未使用"当它不再被引用时。
当您启动Windows.UI.Xaml.DispatcherTimer
时,它会将自身添加到当前Dispatcher
内的计时器集合中,从而在Dispatcher
和计时器之间创建直接引用。反过来,计时器保存对其运行页面的引用。由于Dispatcher
是一个全局对象,它将使您的页面保持活动状态,直到计时器停止。
内存泄漏可能还有其他原因(这是一个非常广泛的主题),包括:
{Binding Path=Property.Subproperty}
; 如果上述方法没有帮助,我建议您使用内存分析器查找内存泄漏,例如Visual Studio 2015中包含的诊断工具。